3

画像の作成が完了したとき、または途中で画像ボックスからすべての描画が消去されることがあります。描画が開始される前に GC.Collect() を呼び出すと、クリアする前にさらに描画できますが、完全にクリアしないようにするにはどうすればよいですか?

これはvb.netにあります

ありがとう!

4

2 に答える 2

2

描画された画像を .Net で保持する簡単な方法は、別の Bitmap オブジェクトに描画を行い、次のように、PictureBox の Image プロパティを Bitmap と等しく設定することです。

Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g = Graphics.FromImage(bmp))
{
    // draw whatever
}
pictureBox1.Image = bmp;

申し訳ありませんが、これは C# ですが、原則を説明する必要があります。

描画された画像を保持するもう 1 つの方法は、PictureBox の Paint イベントで描画を行うことですが、これは、コントロールがそれ自体を再描画する必要があるたびに描画コードが実行されることを意味します (別のフォームがその上にドラッグされるたびに発生します)。上記の方法 (コントロールの Image プロパティを設定する) の方が簡単です。

于 2009-10-07T02:39:53.873 に答える
0

上記の場合、「bmp」または「g」オブジェクトが範囲外になり、ガベージ コレクションが行われると、ピクチャ ボックスの画像が変更されます。画像は常に参照コピーだと思います。bmp.clone で画像を画像ボックスにコピーしようとしましたが、それでも bmp がガベージ コレクションされると、画像ボックスの画像が消えてしまいます。私の場合、実行時に作成されたピクチャボックスに割り当てられる(実行時に決定される)そのような画像がいくつかあります。

Dim bm As New Bitmap("C:\picture.bmp")
Dim thumb As New Bitmap(42, 30)
Dim g As Graphics = Graphics.FromImage(thumb)

g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(bm, New Rectangle(0, 0, 42, 30), New Rectangle(0, 0, bm.Width, _bm.Height), GraphicsUnit.Pixel)
pbxHead.Image = thumb.Clone()

g.Dispose()
bm.Dispose()
thumb.Dispose()
于 2010-04-14T20:10:21.673 に答える