使用图形来测量 Window 用户字体大小设置

发布于 2024-11-08 23:20:42 字数 232 浏览 4 评论 0原文

最近提出了一个有关检索用户字体设置(例如 96 或 120 dpi)的问题,几位 SO 专家告诉我从任何图形对象中使用 dpiX 和 dpiY。

但是 dpi 与屏幕尺寸(X / Y)或字体大小(仅 X 可用)有关吗?

换句话说,我可以确定在所有情况下 dpiX = dpiY 吗?

否则,新字体看起来会被拉长,不是吗?

例如,如果 dpiX = 96 且 dpiY = 60 呢???

Having recently posetd a question about retrieving the user's font settings, like 96 or 120 dpi, several SO gurus told me to use dpiX and dpiY from any graphic object.

But does the dpi relates to the screen size (X / Y) or the font size (X only available) ?

In other words, can I be certain that dpiX = dpiY in all cases?

Otherwise, the new font would look stretched, wouldn't it?

For instance what if dpiX = 96 and dpiY = 60 ???

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鯉魚旗 2024-11-15 23:20:42

如果文本与水平轴或垂直轴对齐,则可以使用另一个轴的 DPI 来指定高度。当字体被实例化时,它将考虑其他尺寸。

例如,如果您想要正常方向的文本,则可以根据垂直 DPI 计算像素高度:

lf.lfHeight = -::MulDiv(point_size, ::GetSysMetrics(hdc, LOGPIXELSY), 72);

如果您的文本旋转 90 度,则可以使用 LOGPIXELSX 而不是 LOGPIXELSY

话虽这么说,我从未见过 Windows 显示屏在两个方向上的 DPI 不一样。我发现它们在某些打印机上有所不同,并且驱动程序处理此问题的方式不一致,这导致了 未回答的问题

If your text is aligned with the horizontal or vertical axis, then you use the DPI for the other axis to specify the height. When the font is instantiated, it will take the other dimension into account.

For example, if you want normally oriented text, then you compute the pixel height in terms of the vertical DPI:

lf.lfHeight = -::MulDiv(point_size, ::GetSysMetrics(hdc, LOGPIXELSY), 72);

If your text is rotated 90 degrees, then you'd use LOGPIXELSX instead of LOGPIXELSY.

That being said, I've never seen a Windows display for which the DPI wasn't the same in both directions. I have seen them differ on some printers, and the drivers handle this inconsistently, which led to this unanswered question.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文