我正在为 OpenGL 编写一个简单的位图字体渲染器,我也想渲染一些 Unicode。然而,在许多字体中,一些字符丢失并呈现为正方形。这些因此浪费了我纹理中的空间,我想摆脱它们。有没有WinAPI函数来检测某个字符是否会被渲染成使用某种字体的 bean 腐方 block ?
我正在使用 GDI,我使用 CreateDIBSection
创建了一个屏幕外位图,然后使用 CreateFontIndirect
获取字体并使用 ExtTextOutW
呈现字形。
到目前为止,我一直在考虑检测光栅化形式的 bean 腐(通过比较像素)哪种方法可行,但我想这不是很好。它还要求我获得一些给定字体肯定没有的 Unicode 字符,以便获得要比较的"template"。我想我迟早会惹上麻烦。
最佳答案
在为 3D 渲染器构建字形映射时,我必须做一些类似的事情来实现我自己的字体链接和字体回退。我使用 Uniscribe 将字符串转换为字形索引字符串并转换为字体。然后我用了 ScriptGetFontProperties获取字体的 wgDefault 属性并将该值与每个字形索引进行比较。
纯 GDI 等价物是使用类似 GetCharacterPlacement 的东西将文本转换为字形索引(然后将 ExtTextOut 与 ETO_GLYPH_INDEX 一起使用),但我认为这不会完成 Uniscribe 会执行的所有键整形和重新排序。对于初学者,我认为这对 BMP 以外的任何事情都不起作用。
您不想在图形上匹配缺失的符号字形,因为它并不总是正方形。例如,在某些字体中,它是一个带有问号的黑色菱形。
关于c++ - 在 Windows 中,如何检测 Unicode 字符是否呈现为正方形( bean 腐)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40745202/