.NET 4.0 图形库 - 如何捕获 "whole" 屏幕?
.NET 4.0 Graphics library - How can I capture the "whole" screen?
我正在编写一个小应用程序,每隔 X 秒截取一次屏幕截图,我 运行 遇到了一个小而烦人的障碍。以这张图片为例:
在 Windows 7 上使用默认 'Print Screen' 功能捕获的屏幕
如果我尝试使用默认的 .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);
此测试在我的配置中正确保存了整个屏幕(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);
}
我正在编写一个小应用程序,每隔 X 秒截取一次屏幕截图,我 运行 遇到了一个小而烦人的障碍。以这张图片为例:
在 Windows 7 上使用默认 'Print Screen' 功能捕获的屏幕
如果我尝试使用默认的 .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);
此测试在我的配置中正确保存了整个屏幕(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);
}