2016-11-22 99 views
3

我正在爲OpenGL編寫一個簡單的位圖字體渲染器,我也想渲染一些Unicode。但是,在許多字體中,某些字符丟失並呈現爲正方形。這些因此浪費了我紋理的空間,我想擺脫它們。是否有WinAPI函數來檢測某個字符是否會以某種字體呈現爲豆腐廣場?在Windows中,如何檢測Unicode字符是否呈現爲方形(豆腐)?

我使用GDI,我讓使用CreateDIBSection一個屏幕外的位圖,然後用CreateFontIndirect得到字體和使用ExtTextOutW呈現字形。

到目前爲止,我正在考慮檢測光柵化形式的豆腐(通過比較像素)哪種作品,但我猜這不是很好。它還要求我獲得某些Unicode字符,以確保給定的字體沒有,以便獲得「模板」進行比較。我想我早晚會遇到麻煩。

+1

問[GetFontUnicodeRanges()](https://msdn.microsoft.com/en-us/library/windows/desktop/dd144887(v = vs.85).aspx)? –

+0

@AlexK。它支持非BMP字符嗎? 'WCRANGE'結構不會爲代理對保留... – andlabs

+0

你如何準備紋理? GDI? GDI +? DirectWrite的?手動處理TTF/OTF文件? – andlabs

回答

2

當爲3D渲染器構建字形映射時,我不得不做類似的事情來實現我自己的字體鏈接和字體回退。我使用Uniscribe將字符串轉換爲字形索引字符串。然後,我使用ScriptGetFontProperties獲取字體的wgDefault屬性,並將該值與每個字形索引進行比較。

純GDI等價物將使用類似GetCharacterPlacement的東西將文本轉換爲字形索引(然後您使用ETO_GLYPH_INDEX使用ExtTextOut),但我認爲這並不能完成Uniscribe將執行的所有關鍵修整和重新排序。對於初學者來說,我認爲這不會超越BMP。

您不想以圖形方式匹配丟失的符號字形,因爲它不總是一個正方形。例如,在某些字體中,它是一個帶有問號的黑色鑽石。

相關問題