我刚刚开始编写这个小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);
答案 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
并获取屏幕截图