Я пытаюсь сделать снимок всего экрана для чтения значений пикселей. На самом деле я делаю это без проблем. Но после 214 снимков я получаю исключение из памяти.C# Bitmap/Graphics Out of Memory
Bitmap ScreenShot = new Bitmap(Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height);
public Bitmap TakeSnapshot()
{
Graphics graphic = null;
Rectangle rect = new Rectangle(0, 0, Screen.PrimaryScreen.Bounds.Width,
Screen.PrimaryScreen.Bounds.Height);
using (graphic = Graphics.FromImage(ScreenShot))
{
graphic.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y,
0, 0,
ScreenShot.Size,
CopyPixelOperation.SourceCopy);
}
return ScreenShot.Clone(rect,System.Drawing.Imaging.PixelFormat.Format32bppArgb);
}
Я использую этот метод с таймером
Bitmap bmp = TakeSnapshot();
var c = bmp.GetPixel(0,0);
Он дает недопустимое исключение параметра. Я решил это с помощью «использования». Но теперь я застрял на этом исключении.
Похоже, вы используете 32-разрядный процесс и выскабливание предела 2GB. Зачем вам все эти снимки в памяти? Уберите те, которые вам больше не нужны. – Rotem
Сходства: http://stackoverflow.com/questions/4318563/c-sharp-out-of-memory-when-creating-bitmap –
Вы удаляете Bitmap самостоятельно после того, как закончите работать с ним? –