最近提出了一个关于检索用户字体设置的问题,比如 96 或 120 dpi,几位 SO 大师告诉我从任何图形对象中使用 dpiX 和 dpiY。
但是 dpi 是否与屏幕大小(X / Y)或字体大小(仅 X 可用)有关?
换句话说,我可以确定在所有情况下 dpiX = dpiY 吗?
否则,新字体看起来会被拉伸,不是吗?
例如,如果 dpiX = 96 和 dpiY = 60 呢?
如果您的文本与水平轴或垂直轴对齐,则使用另一个轴的 DPI 来指定高度。当字体被实例化时,它将考虑另一个维度。
例如,如果您想要正常方向的文本,则根据垂直 DPI 计算像素高度:
lf.lfHeight = -::MulDiv(point_size, ::GetSysMetrics(hdc, LOGPIXELSY), 72);
如果您的文本旋转 90 度,那么您将使用LOGPIXELSX
而不是LOGPIXELSY
.
话虽如此,我从未见过 DPI 在两个方向上都不相同的 Windows 显示器。我已经看到它们在某些打印机上有所不同,并且驱动程序对此的处理不一致,这导致了这个未回答的问题。