FreeType 2.2.1 的一点测试

最近 [FreeType 2.2.1](http://download.savannah.gnu.org/releases/freetype/)
刚刚发布,尽管由于 API 的变化 (许多内部函数被隐藏起来了),多数的 distro
并未把系统使用的 FreeType 升级到这一版本——我相信要过很长一段时间才有可能这
么做。但使用源代码编译的版本,我做了一点小小的对比分析。

因为精力有限,只对 FreeType 2.1.10 (目前绝大多数发行版正在使用的版本)
进行了比较,试图给出基于 FreeType 的程序 (如 fontconfig) 应当如何配置字体
才能获得最好的效果的一点建议。而事实上,font rasterizer (字体光栅化工具)
必须和其他的 rasterizer 比较才能看出明显的区别来,例如 ATSUI, Win32 GDI
等等。

同时,我也只对随 Windows 附的 simsun.ttc 做了测试。如果你有兴趣,欢迎分享
更多的测试结果。

测试的截图在 [flickr](http://www.flickr.com/photos/jjgod/tags/freetype/) 上。

经过比较,我们可以给出这样一些建议:

1. 必须打开 anti-alias,gamma 才会起作用。
2. gamma = 0.0 时启用 sRGB (次像素反锯齿) 模式,这种模式要比默认的
gamma = 1.0 显示得更清晰锐利一些。
3. 绝大多数情况下,打开 hinting 能达到更好的效果。
4. 小于 12px 的情况下,关闭 anti-alias,打开 hinting 能使字体勉强可读,
但仍然建议绝对不要使用这么小的字体。
5. 12px 以上,即 12-16px, 18px 的汉字必须使用嵌入的 bitmap。事实上,AA +
hinting 的汉字要到 28px 以上才可以称为比较可读。

Author: Jiang Jiang

A software engineer from China, working on some OS for a fruit company. Interested in typography and science fiction.

29 thoughts on “FreeType 2.2.1 的一点测试”

  1. 我用MinGW5.0.2+MSYS1.0.1编译出错

    不需要./configure吗?直接进目录MAKE失败,我是菜鸟…

  2. harazi:

    编译的问题,我不用 MinGW,所以不太清楚,不过 FreeType 针对不用的编译器步骤是可能不太一样的,所以你不妨仔细看看说明。

    我自己在 win32 下用 Visual C++ 2005 是可以成功编译的。

  3. lapeqq: FreeType 2.1.4 对 Visual C++ 的支持可能不太好,建议你用 FreeType 2.2.1 尝试一下。或者改用 MinGW 来编译。

  4. ahfu: FreeType 并不依赖其他的库,但你至少要满足有 C 标准库和符合 ANSI C 89 的编译器才可以编译。

  5. “lapeqq: FreeType 2.1.4 对 Visual C++ 的支持可能不太好,建议你用 FreeType 2.2.1 尝试一下。或者改用 MinGW 来编译。”

    我下载代码后
    freetype\build\win32\freetype.dsw
    打开怎么是空的呢?
    是2.2.1的阿
    那在windows上怎么编译呢
    还请指点指点阿
    我对vc++6.0也不是很熟练阿!:(

  6. 那几张图真漂亮!可以使用windows下的simsun, simhei字体吗?我想用它做一个在图像上画字的,不知道怎么调用,需要安装X吗?

  7. Li Jie: FreeType2 没有额外的库需求。可以载入 simsun 这些字体。你需要先用 FreeType2 生成 raster 后的 Bitmap,然后根据 Windows 接受的 Bitmap 类型把像素复制过去 (BitBlt)。

  8. 我用FreeType 2 Tutorial里面那个example1.c测试,发现汉字有些特定字号渲染出错。

    http://www.cppblog.com/Files/cpunion/3.rar

    这里面包含一幅图片,显示出错时的汉字渲染结果,这个是我调用freetype生成的。还包含一个源文件,是从example1.c修改的,使用:
    ./example1 /usr/share/fonts/simsun.ttf 12

    可以直接在控制台上显示渲染结果。
    经测试simsun字体的12-16号字都不能渲染出来,simhei的16,18,20号也不能渲染。不知道是什么原因?

  9. anufa: 我只是使用 FreeType 的 ftview 程序进行预览的,这个程序似乎只在 X 窗口系统下能够运行,不知道有没有 Windows 的 port。你能否把“不正常”的细节说说?

  10. Li Jie: 不好意思,现在才看到,12 – 16 的 simsun 有内嵌的像素字体,你不妨检查一下启用 bitmap 字体的选项是否开启了。

  11. Li Jie: 另外 12 – 16 这么小的字体,在控制台下估计看不太出效果来,我下次贴一个 Windows 利用 Win32 的 GDI API 来输出 FreeType 结果的办法吧,你可以用 AntiGrain Geometry 这套 C++ 图形库来调用 FreeType, 里面有现成的例子。

  12. 我在vc6下无法编译FreeType 2.2.1,那为老大能把编译好的.dll和.lib发给我一下,将感激不尽:)
    我的邮箱:qujianbiao@126.com

  13. 能不能请教一个问题:我想将freetype2移植到嵌入式系统中运行,但是我的系统是大端字节序,在freetype2程序中也未找到相应的宏控制,不知用什么办法处理?

  14. 是不是有什么相应的编译选项?我的编译器是tcc。各位大侠指点迷津

Leave a Reply

Your email address will not be published. Required fields are marked *