FreeType的字型排版資訊
前言
在之前的初探FreeType中讀取出字型的pixel資料,但只是這樣的資料並不夠用,只是畫出單一個字還可以,如果要畫一個字串的話,就需要知道"排版資訊",在此做個紀錄。內容
在之前的"初探FreeType"中,每個"glyph"的寬跟高都是不同的,要畫出一個左排到右的字串的話,會發現無法對齊,因為只知道該字的Pixel寬與高並沒有辦法對齊。排版的資訊在"FT_load_Glyph()"時就會存在"face"裡,個人整理了排版資訊如下圖
字型的排版資訊 |
"glyph width"的部分可以在"face->glyph->matrics.horiAdvance"取得,取得後記得除以64,就可以取得pixel的寬。
"glyph height"比較簡單,還記得"FT_Set_Pixel_sizes()"嗎?最後一個參數就是這個數值。
"code width"可以在"face->glyph->matrics.width"取得,取得後記得除以64。
"code width"可以在"face->glyph->matrics.height"取得,取得後記得除以64。
"code offset x"可以在"face->glyph->matrics.horiBearingX"取得,取得後記得除以64。
"code offset y"這個比較麻煩,"glyph height-(face->glyph->bitmap_top+glyph height/4)",這計算式看起很奇怪是因為FreeType是左下座標為基準,但我定義的這個數值卻是左上座標,所以要做個換算。
接著來說一些注意事項,有些字是無法讀出字型資訊的,比如說"\n",也就是換行,在畫字串時要記得處理特殊字元。"code offset x"與"code offset y"是有"負值"的,如"j"這個字元的"code offset x"就是負的。如果"code offset x"是負值,該值就不會被算在 "glyph width"裡面,如下圖
"code offset x"是負值的狀況 |
沒有留言:
張貼留言