2013-10-13 3 views
1

J'essaye actuellement de créer un bitmap glyphe qui ne contient que la bordure extérieure du glyphe, sans remplissage à l'intérieur. Utilisation de la bibliothèque FreeType pour cela. Voici mon code qui est similaire à l'exemple 2 du code de référence FreeType:FreeType: comment pixelliser les contours non-remplis

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); 

En conséquence, j'obtenir outlineSpans vecteur rempli de portées pour toute l'image de glyphe, mais j'ai besoin que la « frontière » à pixellisée. CurrentFace->glyph contient le glyphe que j'ai chargé en utilisant FT_Load_Char(currentFace, *ch, FT_LOAD_NO_BITMAP)) Qu'est-ce que je fais mal? Merci pour toute aide, il n'y a pas beaucoup de documentation/exemples sur FreeType dans le net.

Répondre

0

Partage ci-dessous la solution comment vous pouvez le faire avec les polices contour car j'ai travaillé avec cela seulement, cela pourrait vous aider.

 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