メモリリークが発生しないように、ビットマップを適切に処理する方法を知る必要があります。私はBackgroundWorkerでビデオを取得し、それをPictureBoxに割り当てています。
private void bwVideo_ReadCamera(object sender, DoWorkEventArgs e)
{
Bitmap temp = null;
while (true)
{
Image<Bgr, Byte> frame = logitec.QueryFrame();
if (temp != null)
temp.Dispose();
temp = frame.ToBitmap();
pictureBox2.Image = temp;
}
}
問題は、このコードで「メモリ不足例外」が発生することです。BackgroundWorker ReportProgressを使用してpictureBox2.Image変数を解放し、上記のコードでdisposeが終了するのを待ってみました(PictureBoxイメージでdisposeを呼び出すにはGUIと同期する必要があります)。また、ImageとBitmapの間でデータを共有するImageクラスの「Bitmap」プロパティを使用しようとしました。
だから私の質問は、この状況で、私の画像を処分する適切な方法は何ですか?