我们有一些代码可通过以下方式构造图元文件图像:创建一个新的图元文件,然后从图元文件中获取一个Graphics对象,然后将内容绘制到其中。多年来一直很好。但是,如果用户关闭其“修复应用程序的缩放比例”设置并且缩放比例大于等于150%,则此操作现在已失效。
Windows现在正在采取的新颖的High DPI缩放功能来减少文本模糊,似乎正在滑入通用的Graphics操作中,而不仅仅是在屏幕上呈现...
Graphics.DrawImage(someOtherImage,0,0,someOtherImage.Width,someOtherImage.Height)
似乎在绘制之前通过用户的缩放来缩放someOtherImage,这样您只能将someOtherImage的左上角绘制到图元文件中。
您还可以通过注释掉SetProcessDPIAware()调用来获得这种效果,以使您的应用程序看起来像是DPI不知道...您将图形绘制命令转换为图元文件受到用户的缩放设置的影响。
这似乎是减少模糊缩放的一种聪明方法。随着绘图的进行,在绘制命令处进行缩放……但是,他们仅在将东西绘制到屏幕上时要特别小心,并非所有内容都将传递给Graphics对象!似乎大多数情况下.NET 4.8都会出错(有时情况正确,而有时情况不正确)。
有没有人知道当用户将“固定比例缩放”设置为“关”时,DPI Unaware应用或应用的幕后到底发生了什么?是否打算影响应用程序对所有Graphics对象的使用?如果不是,它们如何区分要操作的图形绘制命令?还是有其他解释说明为什么在“修复应用的固定缩放”功能关闭时,为什么会根据用户的缩放设置来裁剪图像?