0

画面をキャプチャし、イメージ データをメモリ ストリームに保存して、BitmapImage オブジェクトに設定できるようにします。

bmp = new System.Drawing.Bitmap((int)sel.rectSelectedArea.Width, (int)sel.rectSelectedArea.Height);
bounds = new System.Drawing.Rectangle((int)sel.rectSelectedArea.X, (int)sel.rectSelectedArea.Y, (int)sel.rectSelectedArea.Width, (int)sel.rectSelectedArea.Height);

using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bmp))
    g.CopyFromScreen(new System.Drawing.Point(bounds.Left, bounds.Top), System.Drawing.Point.Empty, bounds.Size);

ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
ms.Position = 0;

frames.Add(new BitmapImage());
frames.Last().BeginInit();
frames.Last().StreamSource = ms;
frames.Last().EndInit();
frames.Last().Freeze();

次に、そのフレームをユーザーに表示する必要があるとき。選択したフレームをソースとして Image オブジェクトに設定します。

imgExample.Source = frames[targetFrame];

問題は、ユーザーに別のフレームを表示するときです。前のフレームはメモリに残っているため、約 200 フレームの後、解放されることのない 3 ~ 600,000 K のメモリが蓄積されます。

imgExample (Image オブジェクト) にメモリを即座に解放させる方法はありますか? または、すべてのフレームに対して新しいオブジェクトを作成する代わりに、同じメモリを上書きする方法があります。

4

1 に答える 1