none
PictureBox放大造成的例外 RRS feed

  • 問題

  • Dear all,
         我在Panel上放一個 PictureBox,
    Panel的AutoScroll屬性設為True。
    PictureBox的SizeMode屬性設為Zoom。
    PictureBox的Image屬性,隨便載入一張約1k x 1k的影像。
    在PictureBox上加入MouseClick的事件,每Click一次,PictureBox的Size就放大2倍。
      
        private void pbImage_MouseClick(object sender, MouseEventArgs e)
        {
          int width = pbImage.Size.Width * 2;
          int height = pbImage.Size.Height *2;
          pbImage.Size = new Size(width, height);
        }

    每次放大幾倍後,就會發生例外,無法用try...catch 去攔。


    訊息如下:
    BufferGraphicsContext cannot be disposed of becuase a buffer operation is currently in process.
    call stack:
    ************** Exception Text **************
    System.InvalidOperationException: BufferedGraphicsContext cannot be disposed of because a buffer operation is currently in progress.
       at System.Drawing.BufferedGraphicsContext.Dispose(Boolean disposing)
       at System.Drawing.BufferedGraphicsContext.Dispose()
       at System.Drawing.BufferedGraphicsContext.AllocBufferInTempManager(Graphics targetGraphics, IntPtr targetDC, Rectangle targetRectangle)
       at System.Drawing.BufferedGraphicsContext.Allocate(IntPtr targetDC, Rectangle targetRectangle)
       at System.Windows.Forms.Control.WmPaint(Message& m)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
    ***********************************

    載入的不同大小的圖片,則發生的放大倍率也不同。
    記得以前有試過,應該是PictureBox的Size有所限制。
    雖然把PictureBox改用Panel去顯示圖片就不會發生例外,但Panel在拉動ScrollBar時閃動會比較明顯。
    不知道,各前先進有沒有好的解法。


    謝謝

                    Howard

    註:經測試的結果,PictureBox.Size 最大只能設到(13367, 13367) ,再大,就會發生上述的例外。
    2007年12月19日 下午 02:15

解答

  • Dear chhuang,
    感謝您的建議。這兩個控制項真的不錯。不過,我的用途是屬於放大的狀況。
    而且大小超出PictureBox大小的限制。所以我搜尋到個這個例子似乎比較符合我的需求。
    而且我試過,將一張圖放大到50K x 50K 不會有問題。

    http://www.codeproject.com/KB/miscctrl/Extended_PictureBox.aspx

    給大家參考參考。

    謝謝
    2007年12月20日 上午 01:40

所有回覆