我正在尝试渲染文件中已经默认着色的表情图标。我用的是“Segoe UI Emoji”SHA-256: 9e5a8c7e6c1e9096918a490798f4177107f0522870c8ad0227d5f02be407e0ed
问题是FT_HAS_COLOR()总是返回false,因此我不能使用FT_LOAD_COLOR将位图加载到我的纹理中。
我在通用字符映射表中打开了这个文件,看到了这个-

下面是光栅化字形的代码片段
FT_Int32 flags = FT_LOAD_FORCE_AUTOHINT | ( m_bAntiAliasing ? FT_LOAD_TARGET_NORMAL : FT_LOAD_TARGET_MONO );
if ( FT_HAS_COLOR( m_face ) )
flags |= FT_LOAD_COLOR;
else
flags |= FT_LOAD_RENDER;
if ( FT_Load_Char( m_face, glyphit->first, flags ) )
continue;结果如下

我非常感谢任何人的帮助,我已经坚持了很长一段时间,并尝试了该字体/其他字体的不同版本。
注意:我看过this,但似乎没有人回答
谢谢。
发布于 2019-02-20 18:08:01
从FreeType文档中:
从2.5开始加载嵌入式彩色位图图像。生成的彩色位图(如果可用)将采用FT_PIXEL_MODE_BGRA格式。如果未设置该标志,但找到彩色位图,则会使用FT_PIXEL_MODE_GRAY格式将它们透明地转换为256级灰度位图。
显然,FreeType只支持彩色位图图像。Segoe使用COLR/CPAL矢量格式,也许这就是它返回负数并渲染常规“黑白”字形的原因?
发布于 2019-02-21 01:48:59
解决了,@PeterT提到,CPAL2.10支持Segoe UI Emoji和类似的使用FreeType的字体,2.9.1不支持。
谢谢!
https://stackoverflow.com/questions/54781525
复制相似问题