65.9K
CodeProject 正在变化。 阅读更多。
Home

Hershey 字体包装类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (8投票s)

2000年3月29日

viewsIcon

98166

downloadIcon

4532

使用 Hershey 矢量字体以获得更快的渲染效果

Sample Image - HersheyFont.gif

最近在构建一个 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

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.