我正在尝试采取的这个.位置.x&y和这个.大小.宽度和高度的Windows窗体的屏幕截图。
问题是,在其他笔记本电脑上,屏幕截图是在HiDPI显示器上的错误位置拍摄的(大小没有问题)。
search.Dispose();
search = new Bitmap(this.Size.Width, this.Size.Height);
Graphics gr = Graphics.FromImage(search);
gr.CopyFromScreen(this.Location.X, this.Location.Y, 0, 0, search.Size);
我想取位置819,184实际上是从位置538,122取的....
1条答案
按热度按时间zed5wv101#
这个问题的出现是由于你试图运行程序的显示器的DPI不同。现在大多数高档笔记本电脑都有HiDPI显示器(苹果称之为“视网膜”显示器)。这导致坐标在错误的位置,因为默认情况下,非DPI感知应用程序的显示输出图像只是被拉伸,以匹配你试图运行它的HiDPI显示器的DPI。
解决这个问题的一个简单方法是将你想使用该程序的电脑的显示比例改为100%。在HiDPI显示器上,这会导致所有东西都比平时小。在Windows 11上,进入设置-〉显示-〉比例,并在下拉菜单中将其改为100%。然而,这有一个副作用,即使电脑上的所有东西都变小。
您也可以尝试使用兼容性设置。右键单击.exe -〉属性-〉兼容性选项卡-〉更改高DPI设置-〉选中“覆盖高DPI缩放行为。缩放执行者:“,然后在下拉菜单中选择应用程序。
另一种方法是让你的WinForms应用程序支持DPI。这将修复在HiDPI显示器上运行时由于窗口内容拉伸而导致的模糊。Follow the steps in this other SO answer.
这个问题实际上在很多老应用程序中很常见,在每个人都使用花哨的HiDPI显示器之前。回到Windows XP时代,大多数计算机的显示比例都保持默认设置。甚至CRT显示器也还在使用。