2010-12-09 44 views
1

直到現在我使用了紋理(bitmapfont)進行字體渲染,但是我試圖讓freetype2工作。我所有的字符串都是SHIFT_JIS編碼,我唯一的問題是現在從freetype獲得正確的字形到合適的SHIFT_JIS位序列。但它似乎比我預期的更難。例如,「亜」具有charcode「0x889F」(字節1設置爲136,字節2爲159) - 這是根據SHIFT_JIS編碼。因此,我調用的函數:從freetype(SHIFT JIS編碼)檢索指定的字形?

FT_Select_Charmap(face, FT_ENCODING_SJIS); 

,並嘗試再加載字形與則charCode:

FT_Load_Char(face, 0x889F, FT_LOAD_RENDER); 

但我收到一些隨機的字形。它不能是一個字體特定的問題,因爲我嘗試了不同的字體,結果相同(是的,他們提供了一個shift-jis charmap)。例如,「0」(零)應該在位置0x0030 - 但它實際上在0x002D。不是所有的字符都有一個3的常量偏移量,否則就沒有問題了......我想我的「FT_Load_Char」調用,以錯誤的方式傳遞charcode參數 - 但不能猜測它是怎麼回事。已經嘗試過:

FT_Load_Char(face, FT_Get_Char_Index(face, 0x889F), FT_LOAD_RENDER); 

但是然後我收到另一個隨機字形。 那麼,如果沒有選擇默認charmap,我怎樣才能將charcode傳遞給FT_Load_Char?

任何建議將是非常有益的。謝謝。

回答

0

如果任何人稍後會發現類似的問題: 我最終將字符代碼動態轉換爲unicode(使用icu4c)。看起來像很多日本SJIS字體標題有問題(它們不能通過freetype枚舉進行選擇 - 只有當您列出其中一種字體的所有可用字符集,然後手動選擇右鍵時 - 編碼ID的平臺ID &所有這些字體都是相同的)。但這不是我需要的恰當解決方案(因爲使用不同的字體),所以我最終決定使用Icu4c。

希望這會對某人有所幫助。

相關問題