Hershey 字体包装类






4.50/5 (8投票s)
2000年3月29日

98166

4532
使用 Hershey 矢量字体以获得更快的渲染效果
最近在构建一个 GIS 显示系统时,我遇到了在同一个视图中以许多不同的尺寸、旋转(倾斜度)和多种字体显示字符的问题。不幸的是,使用 Windows 字体例程获得的重绘性能并不好。 回顾我的过去(并且肯定显示了我的年龄),我决定使用久负盛名的“Hershey”矢量字体。
所有的字体管理和显示都封装在类 SMFontUtil
中,其使用方式在包含的 FontDemo 程序中说明。 唯一真正重要的函数是
void SMFontUtil::DrawString(
CDC * pDC, //device context to draw to
CPoint pStart, //starting point
double pRotation, //rotation angle clockwise in radians (0 = 12:00)
double pCharWidth, //width of each character
double pCharHeight, //height of each character
FONT_TYPE pFontType, //the font to use
CString pString) //the string
注意:对于本文,我硬编码了路径,因此字体定义数据(位于 FontData.zip 中)必须位于 C:\HersheyFonts。 在实际系统中,这些数据存储在与 GIS 数据相同的服务器上。
原始 Hershey 字体字符代码与 ASCII 不太匹配。 我构建了一个翻译表,将 ASCII 字符和字体映射到 Hershey 字符。 包含的字体是
SMALL_SIMPLEX
SMALL_DUPLEX
SIMPLEX
DUPLEX
TRIPLEX
MODERN
SCRIPT_SIMPLEX
SCRIPT_DUPLEX
ITALLIC_DUPLEX
ITALLIC_TRIPLEX
FANCY
GOTHIC
我还包含了一个简单的 字体编辑器,允许您编辑顶点和翻译表。 要编辑字符,请在任何视图中右键单击它。 要将 hershey 字体分配给 ASCII 字体系列配对,请在数字视图中选择该字符,然后从菜单中选择“index save”。 切换到 Xlated 视图并选择目标单元格,然后选择“Assign Index”。

字体数据存储在两个文件中。 矢量数据,以及我提供的翻译表,都包含运行时版本和人类可读版本,格式为 CSV,供希望使用它们的人使用。 SMFontUtils
类提供了一种将 CSV 转换为运行时版本的方法。 再次请注意,为了本文的目的,字体定义数据(FontData.zip)必须提取到 C:\HersheyFonts。
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。