我捕捉屏幕,然後將圖像數據保存到內存流,以便我可以將其設置爲BitmapImage對象。C#WPF處理圖像對象
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();
然後,當我需要顯示該框架給用戶。我將選定的幀設置爲圖像對象的來源。
imgExample.Source = frames[targetFrame];
問題是當我向用戶顯示另一幀時。前一幀保留在內存中,所以在大約200幀之後,它會消耗從未釋放的3-600,000 K的內存。
有沒有一種方法讓imgExample(Image對象)立即釋放內存? 或者是否有覆蓋相同內存的方法,而不是爲所有幀創建新對象。
我愛你帶來的恐龍'System.Drawing'東西到WPF的方式。 –
你可以嘗試一個WriteableBitmap - 這些很容易更新,只要你喜歡。 – Chris