2013-10-13 6 views
1

В настоящее время я пытаюсь создать растровое изображение глифа, которое содержит только внешнюю границу глифа, без какого-либо заполнения внутри. Для этого используется библиотека FreeType. Вот мой код, который похож на пример 2 кода из FreeType ссылки: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)) Что я делаю неправильно? Спасибо за любую помощь, в NetType не так много документации/примеров о FreeType.

ответ

0

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

 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 

 Смежные вопросы

  • Нет связанных вопросов^_^