2010-11-06 95 views
1

标题真的说明了一切。我需要帮助从一组独立的图像文件创建自定义字体,或者从C#中以网格方式设置一系列字符的一个图像来创建自定义字体。我到处搜索,没有找到任何有用的资源。如果您有任何建议,请提前致谢。C# - 从图像或图像集创建字体

回答

2

据我所知,C#框架中没有任何内容允许创建字体,通过它的外观你必须自己实现它。微软当然会推出一些工具和SDK来创建字体,here以及其他信息here微软以外有几种工具可以让你创建字体,例如this。我相信这不是你正在寻找的东西,但它是一个开始。

1

这是20年前完成的事情,在可以自由缩放的轮廓字体技术(如TrueType)可用之前完成。其中一些字体仍然在您的机器上,即c:\ windows \ fonts中的.fon文件。它们实际上包含字体中字母的位图,对于字体支持的每个单独字体高度,通常大约有256个字体。

.NET中不存在对这些字体的支持,因此不要考虑创建其中的一种。在一般情况下,不使用TrueType字体的缺点是:

  • 只在某一点可用大小
  • 没有像样的Unicode支持
  • 不同的代码页需要不同的字体
  • 的字距和字形不支持悬
  • 没有抗锯齿的支持
  • 没有ClearType的支持

工具可用于创建您自己的TrueType字体。获取正确的东西并不是一件容易的事情,TrueType的其中一个亮点就是'暗示',当字体以小的点尺寸呈现时,它们会改变字母的形状,以便它们仍然清晰易读。 Verdana是一个非常好的暗示的示例性字体。

Anyhoo,为了追求您的方法,您需要创建一个位图,其中包含您愿意支持的所有字母,例如水平排列。订购它们的最好方法是在靠近你的代码页中选择字母,如西欧和美洲地区常见的Windows 1252

事情很简单,如果字体是固定音高,每个字母将以字母宽度的倍数开始。按比例间隔的字体需要一个单独的查找表,指定每个字母开始的像素偏移量。例如,使用System.Drawing,您可以使用Graphics.DrawImage(图像,矩形,矩形,graphicsunit)重载,在其中设置矩形,以便复制要呈现的字母。使用Encoding.GetBytes()将字符串转换为字体位图中的索引。