none
CCD擷取影像 出現其他地方正在使用 RRS feed

  • 問題

  • 各位好:
    我使用CCD去連續擷取影像 並丟入下面這但程式碼中將影像的
    大小做一個裁切。但是在執行數次後就會出現"其他地方正在使用物件"的
    錯誤訊息。以下是我的程式碼:
     private Bitmap ImageSizeTransfer(Bitmap bmp, int partwidth, int partheight)
     {
       
    Bitmap newbmp=new Bitmap(partwidth,partheight,PixelFormat.Format24bppRgb);
      Graphics g = Graphics.FromImage(newbmp);
      g.DrawImage(bmp, 0, 0,
                  new Rectangle(0,0,partwidth,partheight),
                  GraphicsUnit.Pixel);
       g.Dispose();
       return  newbmp
     }
    錯誤會出現在g.DrawImage這一句。
    想請教如何解決這個問題,謝謝大家。
    2011年9月21日 上午 08:08

解答

  • 有可能是CCD正在使用image, 您可以查一下CCD的文件, 先結束對image的使用, 再傳給ImageSizeTransfer進行處理

    • 已標示為解答 白開水 2011年9月21日 下午 12:47
    2011年9月21日 下午 12:31

所有回覆

  • 使用 Graphics.ReleaseHdc 方法進行釋放看看

    http://msdn.microsoft.com/zh-tw/library/efx5ca22(v=vs.80).aspx


    歡迎參觀我的Blog.NET菜鳥自救會
    2011年9月21日 上午 09:09
    版主
  • 謝謝小歐版主

    不好意思我不太清楚要怎麼使用Graphics.ReleaseHdc 方法進行釋放。

    另外有什麼辦法可以查看是那一個變數被鎖死嗎?

    2011年9月21日 上午 10:39
  • 感覺是您傳入的Bitmap bmp,這個bmp是不是被別人用到呢? 

    請問有其他Code可以看看嗎?


    亂馬客blog: http://www.dotblogs.com.tw/rainmaker/
    2011年9月21日 上午 10:53
  • Bitmap bmp = ImageSizeTransfer(image,512, 512);

    .

    .

    .

    pictureBox1.Image=bmp;

    這是在呼叫 ImageSizeTransfer  然後image,是我的靜態變數

    CCD截取後就存在image。

     

     

     private Bitmap ImageSizeTransfer(Bitmap bmp, int partwidth, int partheight)
     {
       
       Bitmap newbmp=new Bitmap(partwidth,partheight,PixelFormat.Format24bppRgb);
      Graphics g = Graphics.FromImage(newbmp);
      g.DrawImage(bmp, 0, 0,
                  new Rectangle(0,0,partwidth,partheight),
                  GraphicsUnit.Pixel);
       g.Dispose();
       return  newbmp
     }
    相關的程式碼大概就這樣

     



    • 已編輯 白開水 2011年9月21日 上午 11:48
    2011年9月21日 上午 11:33
  • 有可能是CCD正在使用image, 您可以查一下CCD的文件, 先結束對image的使用, 再傳給ImageSizeTransfer進行處理

    • 已標示為解答 白開水 2011年9月21日 下午 12:47
    2011年9月21日 下午 12:31
  • 我找到問題點了 就是在裁切的程式碼 跟PictureBox.Image=image; 會衝突到。

    我的解決方法是 在PictureBox.Image= new Bitmap(image);

    建立一個新的bitmap 去做顯示這樣就不會衝突了,目前這樣子暫時沒問題。

    感謝大家的回復,提供了我DEBUG的靈感 謝謝大家。

     


    • 已編輯 白開水 2011年9月21日 下午 12:47
    2011年9月21日 下午 12:43