【问题标题】:Anti-aliased text in X11X11 中的抗锯齿文本
【发布时间】:2009-12-11 00:39:11
【问题描述】:

我正在试验 Xlib,以更深入地了解 Linux GUI 程序的工作原理。我编写了一个在窗口中显示“Hello, world”的简单程序,但它看起来相当不合时宜,因为文本没有抗锯齿。

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

【问题讨论】:

    标签: linux x11 antialiasing xlib


    【解决方案1】:

    X 协议的文本渲染工具不支持抗锯齿功能,并且目前使用不多。 (我认为原因是 X 字体协议没有任何 alpha 通道的位置。)

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

    【讨论】:

    • 标记被接受,因为这描述了在低级别实际发生的情况。令我惊讶的是,字体处理现在都在客户端。
    • 听起来效率会降低,但从我读到的内容来看,实际上并没有太大区别。是的,客户端现在必须将渲染的文本像素图发送到服务器,但它不再需要在进行文本布局时向服务器查询它需要的所有字体度量数据。这也意味着不再有丑陋的 XLFD 字符串。 :-)
    【解决方案2】:

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

    Pango 和 Qt 都使用了一个废弃的 FreeType 布局引擎的分叉版本,但它正在被整合到 HarfBuzz 项目中。

    另请参阅 Behdad Esfahbod 的这篇博文:Pango vs HarfBuzz,以及这篇更长、更全面的文档:State of Text Rendering

    【讨论】:

    • 文本渲染状态文章读起来很有趣。谢谢。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2014-11-16
      • 2014-02-18
      • 2013-07-25
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      相关资源
      最近更新 更多