X11中的消除锯齿文本

时间:2009-12-11 00:39:12

标签: linux x11 antialiasing xlib

我正在尝试使用Xlib来深入了解Linux GUI程序的工作原理。我写了一个简单的程序,在一个窗口中显示“Hello,world”,但它看起来很不合时宜,因为文本没有消除锯齿。

在X11中显示消除锯齿文本的最佳方法是什么?如何在GTK,Qt和其他工具包中实现抗锯齿?

3 个答案:

答案 0 :(得分:6)

FreeType处于错误的堆栈级别。它只允许你在某些地方绘制字形。通常,您至少需要一种字体选择机制(由Fontconfig提供)和一个整形引擎(由Pango或Qt提供)。

Pango和Qt都使用废弃的FreeType布局引擎的分叉版本,但这已被调和到HarfBuzz项目中。

另见Behdad Esfahbod撰写的这篇文章:Pango vs HarfBuzz,这篇更长更全面的文档:State of Text Rendering

答案 1 :(得分:5)

X协议的文本呈现工具不支持抗锯齿,现在使用不多。 (我认为原因是X字体协议没有任何alpha通道的位置。)

GTK和Qt使用FreeType库在客户端渲染文本,得到带有alpha通道的像素图作为结果。如果X服务器支持RENDER扩展,则客户端可以将该pixmap发送到服务器,以使用其alpha通道将其混合到显示器上。如果X服务器不支持RENDER,则客户端必须检索要显示文本的屏幕区域(基本上采用小屏幕截图),进行alpha混合客户端,并发送生成的不透明像素图回到要显示的X服务器。

答案 2 :(得分:4)

FreeType。 GTK +使用Pango,Qt有自己的文本布局库,但它们最终都使用FreeType,并且几个应用程序(例如启用了抗锯齿字体的XTerm)通过Xorg附带的低级libXft库使用FreeType。 / p>

相关问题