FONT的故事续:Create的时候到底用cell height 好还是char height好?

继上次学习了font的一些术语之后,今天终于发现了我遇到的问题的根源,归根到底就是我们自己create font的时候是用正值呢还是用负值?其实就是用cell height还是char height?

为什么会存在这个问题,自然是因为windows平台下,这两种值创建font的效果是不一样的.因为不同的font size,系统需要作一些scale,如果字体是点阵的或者true type字体中嵌入有几套点阵字体,他就回去寻找一个最佳匹配,问题也就出在这个最佳匹配上面.具体到font engine是如何实现这个匹配我不知道,但是一个小程序可以显示他们的区别

这个小程序会创建10个字体,大小依次增长一个点,然后画一个字符串,下面是在smartphone上的截图:

第一次,用的是cell height

第二次,我们使用char height

不去对比两幅图中字体的绝对大小,只看每一幅图中字体的相对大小,可以发现,在第一副中,对于有些字体大小,字体高度增加一点,实际上的字符并没有被放大,变化的只是internal leading, 这个可以用GetTextMetrics看到.而对于char height,因为我们指定了字符的高度,所以gdi就必须按照我们的制定去缩放,相反internal leading并没有变化,但是这样字体缩放之后效果就不是很好.

所以如果你希望字体看着舒服一些,并不需要强调同一UI里面字体的相对大小的话,那么cell height会好些,而如果你希望字体大小绝对符合你的指定,或者希望同一个UI里面字体有对比的大小字体,并且大小相邻一两个像素左右,那么char height应该是正确的选择.

Advertisements
This entry was posted in Win32 Programming. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s