我正在为OpenGL编写一个简单的位图字体渲染器,我也想渲染一些Unicode。但是,在许多字体中,某些字符缺失并呈现为正方形。因此,我的纹理浪费了空间,我想摆脱它们。是否有WinAPI函数来检测某个字符是否会使用某种字体呈现为豆腐方块?
我正在使用GDI,我使用CreateDIBSection
制作屏幕外位图,然后使用CreateFontIndirect
获取字体并使用ExtTextOutW
渲染字形。
到目前为止,我一直在考虑检测光栅化形式的豆腐(通过比较像素)哪种有效,但我想这不是很好。它还要求我获得一些肯定没有给定字体的Unicode字符,以便获得要比较的“模板”。我想我迟早会遇到麻烦。
答案 0 :(得分:2)
在为3D渲染器构建字形地图时,我必须做类似的事情来实现我自己的字体链接和字体后退。我使用Uniscribe将字符串转换为字形索引字符串。然后我用ScriptGetFontProperties获取字体的wgDefault属性,并将值与每个字形索引进行比较。
纯GDI等价物将使用GetCharacterPlacement之类的东西将文本转换为字形索引(然后将ExtTextOut与ETO_GLYPH_INDEX一起使用),但我不认为这样可以完成所有关键的修改和重新排序Uniscribe会做。对于初学者来说,我不认为他们会为BMP之外的任何事情工作。
您不希望以图形方式匹配丢失的符号字形,因为它并不总是正方形。例如,在某些字体中,它是一个带有问号的黑色钻石。