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

本文关键字:Windows 启用 缩放 屏幕截图 | 更新日期: 2023-09-27 18:30:59

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

问题是我运行的 Windows 缩放率为 200%(不,我的视力并不差),当我运行此代码时,我只保存了屏幕的 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);

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

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

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

true

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

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

希望这有帮助。

设置

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

并获得尖叫声