gpt4 book ai didi

c++ - FreeType:如何栅格化非填充轮廓

转载 作者:太空宇宙 更新时间:2023-11-04 14:00:52 32 4
gpt4 key购买 nike

我目前正在尝试创建仅包含字形外部边界、内部没有任何填充的字形位图。为此使用 FreeType 库。这是我的代码,类似于 FreeType 引用中的示例 2 代码:

Spans outlineSpans;
FT_Stroker stroker;
FT_Stroker_New(ft, &stroker);
FT_Stroker_Set(stroker, outlineWidth, round ? FT_STROKER_LINECAP_ROUND : FT_STROKER_LINECAP_SQUARE, round ? FT_STROKER_LINEJOIN_ROUND : FT_STROKER_LINEJOIN_BEVEL, 0);

FT_Glyph g;
FT_Get_Glyph(currentFace->glyph, &g);
FT_Glyph_StrokeBorder(&g, stroker, 0, 1);

FT_Raster_Params params;
memset(&params, 0, sizeof(params));
params.flags = FT_RASTER_FLAG_AA | FT_RASTER_FLAG_DIRECT;
params.gray_spans = RasterCallback;
params.user = &outlineSpans;
outlineSpans.clear();
FT_Outline *o = &reinterpret_cast<FT_OutlineGlyph>(g)->outline;
int err = FT_Outline_Render(ft, o, &params);

FT_Stroker_Done(stroker);
FT_Done_Glyph(g);

作为结果,我得到了 outlineSpans vector ,其中填充了整个字形图像的跨度,但我只需要对“边框”进行光栅化。CurrentFace->glyph 包含我使用 FT_Load_Char(currentFace, *ch, FT_LOAD_NO_BITMAP)) 加载的字形我究竟做错了什么?感谢您的帮助,网上没有太多关于 FreeType 的文档/示例。

最佳答案

在解决方案下方分享如何使用轮廓字体,因为我只使用过轮廓字体,这可能对您有所帮助。

        FT_OutlineGlyph _oGlyph;
struct Point{
int x;
int y;
};

vector<std::pair<int, int>> pointsPairVector;

pointCount = _oGlyph->outline.n_points;

for(int i = 0; i < pointCount; i++)
{
point.first = _oGlyph->outline.points[i].x;
point.second = _oGlyph->outline.points[i].y;
pointsPairVector.push_back(point)
}
//use Cairo to connect points in pointsPairVector

关于c++ - FreeType:如何栅格化非填充轮廓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19348127/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com