C#捕获在Windows中启用缩放的屏幕截图

时间:2013-09-12 09:10:44

标签: c# windows zoom screenshot imaging

我刚刚开始编写这个小C#程序,目的无关紧要。现在它试图制作整个屏幕的截图,并且它成功......有点......

问题在于我运行的是200%缩放的Windows(不,我没有视力不佳),当我运行此代码时,我只获得了保存的屏幕的1/4(左上角部分),而不是完整的预期。我更确定这与200%缩放有关,我问是否有人可以建议一个解决方法,所以它实际上捕获了我的整个屏幕。这是代码:

        string savePath = @"C:\Users\eltaro\Desktop\ScreenShot "+DateTime.Now.ToString("yyyy-MM-dd")+" at "+DateTime.Now.ToString("HH.mm")+".bmp";
        bmpImage = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
        gfxScreenshot = Graphics.FromImage(bmpImage);
        gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0,
            Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
        bmpImage.Save(savePath, System.Drawing.Imaging.ImageFormat.Bmp);

3 个答案:

答案 0 :(得分:1)

所以,这个问题最终被我的朋友解决了,但由于他不住在这里,我会自己写答案。

溶剂实际上是app.manifest,这一行完全解决了这个问题:

< dpiAware> true< / dpiAware>

答案 1 :(得分:0)

来自MSDN:Graphics.CopyFromScreen(Int32,Int32,Int32,Int32,Size):执行从屏幕到图形绘图表面的颜色数据(对应于像素矩形)的位块传输。 “

使用缩放屏幕或多个显示器时,您必须自己定义。 Screen.PrimaryScreen.Bounds.Width,因为此常量定义了屏幕/屏幕分辨率的大小。

希望这有帮助。

答案 2 :(得分:0)

设置

Screen.WorkingArea
Bitmap bmpImage = new Bitmap(Screen.AllScreens[0].WorkingArea.Height, Screen.AllScreens[0].WorkingArea.Width, PixelFormat.Format32bppArgb);

http://msdn.microsoft.com/en-us/library/system.windows.forms.screen.workingarea.aspx

并获取屏幕截图