FreeType: как растрировать незаполненный контур

В настоящее время я пытаюсь создать растровое изображение глифа, которое содержит только внешнюю границу глифа без заполнения внутри. Для этого используется библиотека FreeType. Вот мой код, который похож на код примера 2 из справочника FreeType:

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 вектор, заполненный диапазонами для всего изображения глифа, но мне нужно растеризовать только «границу». CurrentFace->glyph содержит глиф, который я загрузил с помощью FT_Load_Char(currentFace, *ch, FT_LOAD_NO_BITMAP)) Что я делаю неправильно? Спасибо за любую помощь, в сети не так много документации/примеров по FreeType.


person user1687498    schedule 13.10.2013    source источник


Ответы (1)


Делюсь ниже решением, как вы можете сделать это с контурными шрифтами, так как я работал только с этим, это может вам помочь.

        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
person cbinder    schedule 13.11.2013