画像はvb.netのコードを使用して描かれた場合に、その画像を保持するピクチャの強制

StackOverflow https://stackoverflow.com/questions/1529211

  •  20-09-2019
  •  | 
  •  

質問

彼らは画像を作成する、または時々途中で終了したら、すべての図面の

私のpictureboxesは時々明らか。描画を開始する前にGC.Collect()を呼び出すと、それがクリアする前に、それはMOREを描画できますが、どのように私は完全にクリアするからそれを停止することができますか?

このはvb.netである

ありがとうございます。

役に立ちましたか?

解決

.NETで描画された画像を保持する簡単な方法は、個別のBitmapオブジェクトへの描画を行うことで、その後、ビットマップに等しいのPictureBoxのImageプロパティを設定し、このように:

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

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

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

他のヒント

上記の場合、「BMP」又は「G」の目的は、スコープとガベージコレクション、ピクチャ画像変化の外に出るとき。私はイメージが常に参照コピーだと思います。私は、ピクチャボックスに画像をコピーするbmp.cloneを試みたが、BMPがガベージコレクトされたときにはまだ、ピクチャの画像が消えます。私の場合、私が作成したpictureboxesを実行時に割り当てられる(実行時に決定)、このような画像の数をしました。

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()
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top