用XFT库绘制彩色字符串的更快方法是什么?



我有一个字符串和一个数组,其中包含字符串格式的每个字符:color和font。现在我使用XFT库逐个字符地绘制这个字符串,使用各自的颜色和字体(XftDrawStringUtf8函数)。但是这种方法很慢。

我考虑扫描字符串并立即以相同的格式绘制块。但是在某些情况下(如果每个字符都有不同的格式),这种方法可能比逐字符方法更慢。

另外,我在某处读到,从排版的角度来看,一个字符一个字符地绘制字符串不是一种好方法。关于字距的问题。

是否有更快更好的方法,使用XFT库?或者使用其他库?

你可以使用渲染扩展CreateGlyphSet/CompositeGlyphs请求。

GlyphSet是带有偏移量的矩形像素数组。使用CompositeGlyphs请求,您可以在一个请求(一个网络数据包的一种方式)中呈现相当多:它需要"字形集元素"数组,这是"char id数组"+"id数组"中最后一个字符结束的偏移量或使用另一个字形集的id。您可以通过在字距非零的位置将输入字符串拆分为子字符串来调整字距对。颜色是有点棘手的,一种方法是使用源图片(RenderCompositeGlyphs使用渲染文本作为蒙版)预先着色的矩形的颜色,你需要的。

在实践中,特别是如果你需要支持复杂的脚本(如阿拉伯语),我建议用一些高级库(Pango/Cairo)渲染客户端像素图上的所有内容,并将结果图片传输到您的可绘制

如果你只是在探索可能的限制,除了渲染扩展的另一种方法是尝试使用带有顶点和片段着色器的GPU来渲染一切(看看glyphy项目)。也是一个很好的信息来源,关于文本渲染一般在Behdad Esfahbod页面)

相关内容

最新更新