.NET 4.0 Graphics Library - Как я могу захватить «весь» экран? - PullRequest
0 голосов
/ 23 июня 2019

Я пишу маленькое приложение, чтобы делать скриншоты каждые X секунд, и я столкнулся с небольшим, но раздражающим препятствием. Возьмите это изображение, например:

Снимок экрана, сделанный с помощью функции «Печать экрана» по умолчанию в Windows 7 enter image description here

Если я попытаюсь сделать тот же снимок экрана, используя библиотеку графики .NET 4 по умолчанию, обведенная область не отображается. То же самое происходит с меню вкладок Visual Studio и некоторыми другими приложениями, которые я не могу вспомнить. Остальное изображение получается хорошо, хотя.

Это код, который я использую. Возможно, я что-то напортачу, но не могу понять это ради своей жизни. Любая помощь будет оценена:

memoryImage = new Bitmap(resolution.Width, resolution.Height);
Size s = new Size(memoryImage.Width, memoryImage.Height);
// Create graphics 
Console.WriteLine("Creating Graphics...");
Console.WriteLine();
Graphics memoryGraphics = Graphics.FromImage(memoryImage);

// Copy data from screen 
Console.WriteLine("Copying data from screen...");
Console.WriteLine();
memoryGraphics.CopyFromScreen(0, 0, 0, 0, s);

1 Ответ

0 голосов
/ 23 июня 2019

Этот тест корректно сохраняет весь экран в моей конфигурации (Windows 10, VS 2015) =>

Rectangle screenBounds = Screen.GetBounds(System.Drawing.Point.Empty);
using (Bitmap bitmap = new Bitmap(screenBounds.Width, screenBounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb))
{
    using (Graphics g = Graphics.FromImage(bitmap))
    {                       
        g.CopyFromScreen(0, 0, 0, 0, bitmap.Size, CopyPixelOperation.SourceCopy);
    }
    bitmap.Save("e:\\ScreenCopy.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
...