0

カスタム作成されたプロッター クラスで問題に直面しています。このクラスは、指定された PictureBox の Image を描画するためのものです。

基本的な使用法は次のようなものです。

        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 画像が自動的に更新されるよりも、グラフィックスを使用して using ブロックで描画します。

pictureBox 画像が更新される前にクラスが破棄されるため、どこかに問題があると思いますか?

this.pictureBoxRef.Image = this.drawBitmap;

ビットマップのクローンを使用する方が良いでしょうか? (それが同じ範囲にとどまる場合、それは私が恐れる助けにはなりません)

ブロックを使用してこのクラスを使用すると、dispose フェーズに到達したときに 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 は処理されませんでした。スタックトレースは次のとおりです。

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 に答える