首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Freetype/Harfbuzz渲染文本并为其着色

使用Freetype/Harfbuzz渲染文本并为其着色
EN

Stack Overflow用户
提问于 2015-07-10 12:41:45
回答 2查看 1.4K关注 0票数 1

我已经用Freetype渲染了一个文本,并使用Freetype.The将其转换为位图,创建的位图存储在一个字符数组中,稍后由Targa Reader处理为.tga image.NOW,我如何以及何时分配颜色给字形,而我正在转换字形到位图或我应该使用Freetype或Harfbuzz来着色吗?

EN

回答 2

Stack Overflow用户

发布于 2017-06-20 04:38:17

我不认为harfbuzz会为你做这样的事情,它只是一个形成库。但是对于freetype,据我所知,有两种方法可以绘制字形并将它们绘制为位图。第一。我猜,默认情况下,它会将字形渲染为灰度位图。第二。您可以通过向freetype引擎发送一些回调来控制字形的渲染,而不是freetype,它会调用这些函数,其中一个函数用于使用alpha、coverage、x和y参数绘制扫描线跨度,以便您轻松操作位图。

您可以在freetype的c语言示例源代码@freetpye.org中找到我正在讨论的更多信息

如果你觉得它太复杂了--我不这么认为--如果你渲染的位图全是灰色的,你想要应用你自己的颜色,就像易卜拉欣建议的那样,你可以使用位图的像素值作为alpha,然后这样做:

代码语言:javascript
复制
unsigned char alpha = src[x, y];
red = color.r * alpha / 0xff;
green = color.g * alpha / 0xff;
blue = color.b * alpha / 0xff;
dst[x, y] = Color(red, green, blue);

希望他们能帮上忙。

票数 2
EN

Stack Overflow用户

发布于 2016-07-02 01:13:11

harfbuzz在这里不是很相关,因为它并不关心渲染方面本身。

但是freetype,因为它通常的使用方式(考虑不谈论颜色表情或其他我不熟悉的边缘情况),FT_RENDER_MODE_NORMAL渲染模式,给你一个灰度位图,每个像素分配一个字符,不像一个需要3倍大小(或4倍,如果你有alpha通道)的彩色图像,它不关心颜色AFAIK,所以你需要做的就是将freetype渲染的灰度输出乘以你想要的颜色。类似于下面的伪代码:

代码语言:javascript
复制
coloredImage[x, y].r = r * grayScale[x, y] / 255;
coloredImage[x, y].g = g * grayScale[x, y] / 255;
coloredImage[x, y].b = b * grayScale[x, y] / 255;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31332593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档