Я поместил все в функцию.
/// <summary>
/// Takes a screenshot of the specified section of the screen.
/// </summary>
public void Screenshot(string filename, ImageFormat imageFormat, int width, int height, int sourceX, int sourceY, int destX, int destY)
{
using (var bm = new Bitmap(width, height))
{
using (var gr = Graphics.FromImage(bm))
{
gr.CopyFromScreen(sourceX, sourceY, destX, destY, bm.Size);
bm.Save(filename, imageFormat);
}
}
}
Например, для снимка экрана размером 500x500, начиная с верхнего левого угла экрана:
Screenshot(@"c:\temp\test.jpg", ImageFormat.Jpeg, 500, 500, 0, 0, 0, 0);
Может потребоватьсяэто импорт в верхней части вашего класса c #:
using System.Drawing;
using System.Drawing.Imaging;
Графический объект в вашем коде был нулевым, потому что он никогда не инициализировался."Var gr = Graphics.FromImage (bm);"строка - это то, что инициализирует его в моем примере (предоставляя растровое изображение, в которое оно затем будет записывать).
Я использую операторы «using» с растровым изображением и объектом Graphics, потому что необходимо вызвать метод Disposeна них, когда они сделаны (что оператор using будет делать автоматически, даже если есть исключение).