为了进行自动回归测试,我捕获了应用程序内部 GDI 画布的一些屏幕截图,并将它们与新版本中的屏幕截图进行比较。图像比较必须是像素完美的,测试才能通过。这在我的计算机和同事的计算机(均为 Windows 7)上运行良好,但如果我们将一台计算机上拍摄的图像与另一台计算机上拍摄的图像进行比较,比较总是失败。差异显示 GDI 字体渲染存在一些细微差异。我想知道哪些因素会影响字体渲染,从而导致外观出现这种差异,但我没有主意了。
- 据我们所知,我们安装了相同的字体。
- 两台机器的字体大小均设置为 100%
- 我们在相同的屏幕分辨率上运行
- 我怀疑是 ClearType 设置的问题,确实检查了注册表 HKCU\Software\Microsoft\Avalon.Graphics\DISPLAY1,发现我的机器上设置了一些级别、对比度和文本对比度的键,而我的同事的机器上没有这些键。但我从注册表中删除了这些键,重新启动后我们仍然没有生成匹配的图像。还有其他方法可以导出清晰的类型设置吗?
- 我也尝试了“视觉效果/屏幕字体的平滑边缘”,但没有效果
是否有其他设置会导致字体渲染出现差异?或者是否有任何服务包可能会影响它?
答案1
正如所怀疑的那样,ClearType 是罪魁祸首。它在两个系统上的调整方式不同。除了 HKCU\Software\Microsoft\Avalon.Graphics\DISPLAY1 中列出的注册表项外,我还发现了另一组存储 ClearType 配置的注册表项。它们位于 HKCU\Control Panel\Desktop 中,名为:
- 字体平滑
- 字体平滑伽玛
- 字体平滑方向
- 字体平滑类型
事实证明,FontSmoothingGamma 在我们的机器上设置为不同的值(我的是 1000,我的同事是 0)。在我将其设置为 0 并重新启动后,我们机器上的字体渲染现在相同了。