2013-10-13 56 views
1

我目前正在嘗試創建只包含字形外部邊界的字形位圖,沒有任何填充內部。爲此使用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的文檔/例子。

回答

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