自由类型:如何栅格化未填充的轮廓
FreeType: how to rasterize non-filled outline
我目前正在尝试创建仅包含字形外边框的字形位图,内部没有任何填充。为此使用 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(¶ms, 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, ¶ms);
FT_Stroker_Done(stroker);
FT_Done_Glyph(g);
结果outlineSpans
我得到了填充整个字形图像跨度的矢量,但我只需要栅格化"边框"。 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++中用vector填充一个简单的动态数组
- 如何使用用户输入在C++中正确填充2D数组
- 如何找到大小'x'数组是否完全填充,在C++?
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 通过for循环使用用户输入填充列表
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 如何正确填充在堆上分配的二维数组?
- 将数字转换为填充字符串
- 有没有办法在一行中填充矢量图
- 用C++中的数字和条件填充向量
- 用真值填充矢量
- 使用结构成员指针在C++中填充结构
- 流填充字符的默认定位
- 使用不同算法的 PKCS1v15 填充进行加密 ++ 签名
- C++:使用缓冲区中的数据填充结构
- 如何将零填充的多维数组传递给 C++ 中的函数?
- Cryptopp:获取密码输入的填充字符串
- 填充上编译器生成的复制构造函数之间的不一致
- 用点填充一条线,然后寻找与轮廓的交叉点
- 自由类型:如何栅格化未填充的轮廓