2015-10-26 37 views
0

我發現freetype2不能正確處理subglyphs的位置(或者我可能錯誤地使用它)。例如,當我嘗試渲染'Ã'時,A上帶有波浪號,我得到:FreeType對字形做了什麼變換?

http://i.imgur.com/3pkYfO3.png忽略小尾巴和紅色文字無處不在;問題是,波浪與A.交叉

當我指定FT_LOAD_NO_RECURSE標誌,然後加上我自己的兩個subglyphs(使用從FT_Get_SubGlyph_Info ARG1和ARG2偏移量),這是正確的:http://i.imgur.com/TrjgHVs.png

這與幾乎所有其他複合字符都是類似的故事。

也許相關:我使用的是精確的電話是:

FT_Library library = { }; 
FT_Init_FreeType(&library); 
... 
FT_Face face = { }; 
FT_New_Face(library, "arial.ttf", 0, &face); 
... 
FT_Set_Char_Size(face, 10, 10, 72, 72); 
... 
FT_Load_Glyph(face, glyphIndex, FT_LOAD_NO_BITMAP); 

所以,第一個問題:我在某種程度上使用對FreeType2錯了嗎?

如果確實是freetype2中的一個錯誤,而且我必須繼續使用FT_LOAD_NO_RECURSE,那麼我的問題是FT_LOAD_NO_RECURSE意味着FT_LOAD_NO_SCALE和FT_LOAD_IGNORE_TRANSFORM。效果是我的結果字符有非常奇怪的座標。例如,斜線字符, '/',以前有這四點:

  • 頂部:28,46
  • 權:34,43
  • 左:4,1
  • 下: 10,-2

但現在沒有縮放或轉換,我得到以下幾點:

  • 頂部:901147 4
  • 權:1087,1376
  • 底部:328,-74
  • 左:142,24

主要問題:我怎麼回第一組座標?我要添加/乘以什麼?

非常感謝!

回答

0

原來,這是答案:

FT_Load_Glyph(face, glyphIndex, FT_LOAD_NO_BITMAP); 
float scaleX = face->size->metrics.x_scale/65536.0; 
float scaleY = face->size->metrics.y_scale/65536.0; 

for each point: 
    point = vec2(round(point.point.x * scaleX), round(point.point.y * scaleY)); 

face->尺寸 - >指標有我們多少應該擴大它從網格單元去字體單位。然後,我們得到最後。這一定是FT_LOAD_NO_SCALE未設置時發生的情況。