关于windows program中gdi介绍的字体一些问题

zsfbx 2007-12-08 07:24:18

原文在此:
“在传统的排版中,字体的字母大小由「点」表示。1点大约1/72英寸,在计算机排版中1点正好为1/72英寸。
理论上,字体的点值是从字体中最高的字符顶部到例如j、p、q和y等字母下部的字符底部的距离,其中不包括重音符号。例如,在10点的字体中此距离是10/72英寸。根据TEXTMETRIC结构,字体的点值等于tmHeight字段减去tmInternalLeading字段,如图5-2所示(该图与上一章的图4-3一样)。



图5-2 小字体和TEXTMETRIC字段。
在真正的排版中,字体的点值与字体字母的实际大小并不正好相等。字体的设计者做出的实际字符比点值指示的要大一些或小一些。毕竟,字体设计是一种艺术而不是科学。

TEXTMETRIC结构的tmHeight字段指出文字的连续行在屏幕或打印机上间隔的方式。这也可以用点来测量。例如,12点的行距指出文字连续行的基准线应该间隔12/72(或1/6)英寸。不应该为10点字体使用10点行距,因为文字的连续行会碰到一起。
10点字体读起来很舒服。小于10点的字体不益于长时间阅读。

Windows系统字体-不考虑是大字体还是小字体,也不考虑所选择的视频图素大小-固定假设为10点字体和12点行距。这听起来很奇怪,如果字体都是10点,为什么还把它们称为大字体和小字体呢?

解答是:当您在「控制台」的「显示」程序上选择小字体或大字体时,实际上是选择了一个假定的视讯显示分辨率,单位是每英寸的像素数(点数) 。当选择小字体时,即要Windows假定视讯显示分辨率为每英寸96像素(点)。当选择大字体时,即要Windows假定视讯显示分辨率为每英寸120像素(点)。

再看看图5-2。那是小字体,它依据的显示分辨率为每英寸96像素(点)。我说过它是10点字体。10点即是10/72英寸,如果乘以96像素(点),每10点(每英寸)大概就为13图素。这即是tmHeight减去tmInternalLeading的值。行距是12点,或12/72英寸,它乘以96像素(点),每12点(每英寸)就为16图素。这即是tmHeight的值。
图5-3显示大字体。这是依据每英寸120像素(点)的分辨率。同样,它是10点字体,10/72乘以120像素(点),每10点(每英寸)等于16图素,即是tmHeight减tmInternalLeading的值。12点行距等于20图素,即是tmHeight的值。(像第四章一样,再次强调所显示的是实际的度量大小,因此您可以理解它工作的方式。不要在您的程序中对此写作程序。)”
图我没贴,没什么用。

照我的理解,点是不变的,总是1/72,那么改变dpi,字体如果仍然是10个点的话,字体大小应该不变才是,为什么会变呢?还有为什么改变分辨率字体会变小?按照我对windows program的理解,应该都不变。难道是我那里理解错误了?还请达人指点。
现在我没分了,但还请不吝指教!


...全文
74 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
DDPCCSA 2008-05-18
  • 打赏
  • 举报
回复
这一点我也想不通 正在郁闷 唉,真他妈……
cangwu_lee 2007-12-08
  • 打赏
  • 举报
回复
在實際中測試測試,你將會有所收穫的。
zsfbx 2007-12-08
  • 打赏
  • 举报
回复
另外,文中括号中部分是我得到的电子书中的原文,我感觉这部分可能有误(或许被人改过了),所以用自己的理解改了。另外图素是文中的翻译法,我理解为像素。
难道是我的理解根本就错了?郁闷,想不通。

64,319

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧