我已经用Freetype渲染了一个文本,并使用Freetype.The将其转换为位图,创建的位图存储在一个字符数组中,稍后由Targa Reader处理为.tga image.NOW,我如何以及何时分配颜色给字形,而我正在转换字形到位图或我应该使用Freetype或Harfbuzz来着色吗?
发布于 2017-06-20 04:38:17
我不认为harfbuzz会为你做这样的事情,它只是一个形成库。但是对于freetype,据我所知,有两种方法可以绘制字形并将它们绘制为位图。第一。我猜,默认情况下,它会将字形渲染为灰度位图。第二。您可以通过向freetype引擎发送一些回调来控制字形的渲染,而不是freetype,它会调用这些函数,其中一个函数用于使用alpha、coverage、x和y参数绘制扫描线跨度,以便您轻松操作位图。
您可以在freetype的c语言示例源代码@freetpye.org中找到我正在讨论的更多信息
如果你觉得它太复杂了--我不这么认为--如果你渲染的位图全是灰色的,你想要应用你自己的颜色,就像易卜拉欣建议的那样,你可以使用位图的像素值作为alpha,然后这样做:
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);希望他们能帮上忙。
发布于 2016-07-02 01:13:11
harfbuzz在这里不是很相关,因为它并不关心渲染方面本身。
但是freetype,因为它通常的使用方式(考虑不谈论颜色表情或其他我不熟悉的边缘情况),FT_RENDER_MODE_NORMAL渲染模式,给你一个灰度位图,每个像素分配一个字符,不像一个需要3倍大小(或4倍,如果你有alpha通道)的彩色图像,它不关心颜色AFAIK,所以你需要做的就是将freetype渲染的灰度输出乘以你想要的颜色。类似于下面的伪代码:
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;https://stackoverflow.com/questions/31332593
复制相似问题