处理自定义位图绘图仪时出现ArgumentException

时间:2012-12-23 17:56:28

标签: bitmap dispose idisposable argumentexception

我遇到了自定义书写绘图仪类的问题。 此类用于绘制给定PictureBox的图像。

基本用法是这样的:

        double[] signal = StaticSignalGenerator.Sinus(10.0, 0.0, 1000, 5);
        using (Plot plotter = new Plot(pictureBox1, Color.White))
        {
            plotter.Draw(signal, Pens.Black);
        }

构造函数使用pictureBox1作为参考,并为图像制作白色背景颜色。绘图是长度和幅度的复杂变换,它使用图形在使用块中绘制,而参考pictureBox图像将自动更新。

我认为某处存在问题,因为在PictureBox图像可以刷新之前处理了类?

this.pictureBoxRef.Image = this.drawBitmap;

使用位图的克隆会更好吗? (如果那个会保持在相同的范围内,那我恐怕不会帮助)

如果我使用此类与使用块,到达时 处置阶段我得到了ArgumentException。 该类使用以下行实现IDisposable:

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

    protected virtual void Dispose(bool disposing)
    {
        if (disposing)
        {
            if (this.pictureBoxRef != null)
            {
                this.pictureBoxRef.MouseMove -= new MouseEventHandler(PictureBoxRef_MouseMove);
            }
            if (this.drawBitmap != null)
            {
                this.drawBitmap.Dispose();
            }
            if (this.initializedBitmap != null)
            {
                this.initializedBitmap.Dispose();
            }
        }
    }

参数无效:null,未处理ArgumentException。 StackTrace如下:

  

System.Drawing.Image.get_Width()System.Drawing.Image.get_Size()   System.Windows.Forms.PictureBox.ImageRectangleFromSizeMode(PictureBoxSizeMode   模式)System.Windows.Forms.PictureBox.OnPaint(PaintEventArgs pe)   System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e,   Int16层)System.Windows.Forms.Control.WmPaint(Message& m)   System.Windows.Forms.Control.WndProc(Message& m)   System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)   System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)   System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd,   Int32 msg,IntPtr wparam,IntPtr lparam)

知道如何解决这个问题吗? 提前致谢!

1 个答案:

答案 0 :(得分:0)

很难说,因为你给了我们很少的信息,但看起来它仍然试图绘制一个PictureBox。目前尚不清楚这些是否与您正在处理的值有任何关系,但如果PictureBox包含您正在处置的Bitmap值之一,那么这很容易成为问题。您可能希望先从表单中删除PictureBox,或者将其Image属性设置为null

(如果您可以创建一个简短的完整的程序来演示问题,那么可以让您更轻松地帮助您...)