0

我遇到了自定义书面绘图仪类的问题。此类用于在给定的 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图像会自动更新。

我认为某处存在问题,因为该类是在图片框图像刷新之前被处理的?

this.pictureBoxRef.Image = this.drawBitmap;

使用位图的Clone会更好吗?(如果那将保持在相同的范围内,我担心这无济于事)

如果我将此类与 using 块一起使用,则在到达处置阶段时,我得到了 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)

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

4

1 回答 1

0

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

(如果您可以创建一个简短但完整的程序来演示该问题,那么帮助您将变得更加容易......)

于 2012-12-23T18:07:49.290 回答