Board logo

Subject: AAFont平滑处理是如何取样的? [Print This Page]

Author: songyx0    Time: 2010-11-18 08:43     Subject: AAFont平滑处理是如何取样的?

如下附件
假设目标点是B1,我曾试过A1, A2, B1, B2, C1, C2这样,效果不怎么样,就跟用ps的模糊工具抹了一下似的,边缘不清晰,看AAFont的代码貌似是跳着取样的?搞不明白啊

Image Attachment: 未标题-1.gif (2010-11-18 08:43, 11.69 K) / Download count 38
http://bbs.cnpack.org/attachment.php?aid=785


Author: zjy    Time: 2010-11-19 00:10     Subject: AAFont 的原理是这样

先根据平滑精度将字号放大几倍,绘制后再用均值算法缩小成原字号大小。
比如要绘制12点的文字,用3x3的精度,则先在后台绘制36点的文字,再按每3x3个格子9个点取平均值作为目标像素的方法生成12点的平滑文本。

AAFont是Win98时代的产物,那个时候还没有gdiplus,也没有取字体图元数据的api,所以用的笨办法。

在NT系统下,可以用gdiplus来生成平滑字,或者用GetGlyphOutline来实现,当然用FreeType也可以
Author: songyx0    Time: 2010-11-19 11:23

哦,这样啊,我以为是直接在原图上平滑的
但是AAfont的循环着实让人捉摸不透,其实研究这东西主要是由于我对GDI+的效率比较担心...
Author: songyx0    Time: 2010-11-19 12:06     Subject: 回复 #2 zjy 的帖子

谢谢zjy的解惑,非常感谢哈




Welcome to CnPack Forum (http://bbs.cnpack.org/) Powered by Discuz! 5.0.0