• 在.Net Micro Framework中显示汉字


    摘要:MF平台支持的字体是专有格式,扩展名为tinyfnt,需要用专门的转化工具才能把windows平台上的字体转换为tinyfnt字体。在.Net Micro Framework SDK中提供了一个叫做TFConvert.exe的工具,我们可以用它在命令行下将PC机上的TrueType或者OpenType字体文件生成tinyfnt字体,供.Net Micro Framework的应用程序使用。使用TFconvert 工具进行字体转化,首先需要创建一个.fntdef 的文件其是字体的定义文件,其实它就是一个是TEXT文本文件,但是以.fntdef结尾的。本文阐述了在.Net Micro Framework 中以PC机上的字体显示汉字的步骤。

    1.编辑.fntdef文件

    先创建一个文本文档(.txt),这里我们以华文行楷字体为例,故取名为hwxk.txt。这个文件就是我们用来配置导出字体的文件,我们在其中添加以下内容:

    AddFontToProcess C:"WINDOWS"Fonts"STXINGKA.TTF

    SelectFont "WE:400,HE:20,FN:宋体"

    ImportRange 32 126

    ImportRange 19968 40869

    配置文件中常用的命令如下:

    1)、AddFontToProcess

    格式:AddFontToProcess path

    说明:填写中文字库的路径信息(字库源的路径,需要输入绝对路径),如果路径里有空格,一定用引号括起来,如示例所示:

    AddFontToProcess C:"Windows"Fonts"Miramo.ttf

    AddFontToProcess "C:""Program Files""Microsoft .NET Micro Framework""v2.0.3036""Tools""Fonts""TrueType""Miramo.ttf"

    2)、SelectFont

    格式:SelectFont "selectionstring"

    说明:参数比较多,常用的就下面几个,余下的请看msdn的相关文章。

    WE(Weight)字体的厚重度,0~1000,标准的是400,粗体为700

    FN(Face Name) 字体名称,如果包含空格,要用引号括起来

    HE(Height)字体大小(实际测试范围1~36)

    WI(Width)字体宽度(实际测试范围1~12)

    IT(Italic)设置字体的倾斜角度

    UN(Underline)设置字体下面的下划线

    注意 这个命令是Select Font,也就是说,从字库源中选择出指定参数的字体,.Net Mirco Framework与.Net精简框架集和.Net框架集不同,它的字体的大小、加粗、斜体等等参数不能在程序中任意改变,你导出的是什么样的字体,那就是什么字体,不能改变,一出生就决定命运。例如你对同一个字符串显示不同的大小,那么对应每一个大小,都需要你导出一个字体库。

    3)、ImportRange

    格式:ImportRange start end

    说明:这个比较重要,是指从字库中导出字体的起始和结束位置,可以多个命令连用。

    详细的介绍在msdn上有相关说明:ms-help://MS.VSCC.v80/MS.VSIPCC.v80/MSVS.PSDK/PSDK/PSDK_TF_Fntdef.htm

    2. 打开命令行工具

    在桌面上点击“开始”à“运行”à键入CMD,用cd指令导航到SDK的Tools文件夹下,利用dir命令,我们可以看到该目录的内容如图:

     

    3.使用TFConvert工具

    我们假设在c盘下已经创建了samplefonts的目录,把TFconvert.exe hwxk.ttf (以华文行楷作为例子)复制到该目录下,同时把刚才创建的.fntdef hwxk.fntdef 也复制到该目录下。建议大家在windows xp下进行这个工具的使用。

    TFconvert 使用方法: TFconvert <input file> <output file>

    Input file= 字体定义文件.fntdef,

    output file =字体输出文件 .tinyfnt

    dos 命令行下 切换到samplesfont 目录下,输入:

    TFconvert c:"samplefonts"hwxk.fntdef c:"samplefonts"hwxk.tinyfnt

    回车即可,这样在该目录下就有hwxk.tinyfnt 文件生成。当然,这里的目录也可以是你自定义的。

    4.测试

    在Visual Studio中新建一个Windows Application。首先双击Resources.resx,在出现的Tab页中,我们将String1的内容由“Hello World”改为你要显示的汉语,然后点击左上角的String旁边的小箭头,选择Files:

    然后点击旁边的“Add Resouces”右边的小箭头,选择“Add Existing File”,然后浏览到我们之前生成的tinyfnt所在文件目录下。选择hwxk.tinyfnt,将它添加到资源文件中。

    然后我们打开Program.cs,默认生成的代码中将:

    text.Font = Resources.GetFont(Resources.FontResources.small);

    改为:

    text.Font = Resources.GetFont(Resources.FontResources.hwxk);

    重新编译后,在模拟器中就能看到中文字体了,如下图:


    5.扩展汉字文件

    在前面的实验中,虽然正确的显示出了汉字,但是也许有人会问,为什么fntdef文件中FN会是“宋体”呢,不是华文行楷么?事实上,当你尝试把FN从宋体改为其他名称是,目前版本的TFConvert会在命令行中打印出一条错误信息:“Font cannot be found matching Selectfont descriptor Facename .Expected ‘??’,found ‘??’”。下面我们就来看看,如何解决这个问题,而达到正常显示所有中文字体的目的。

    首先,我们需要使用fontcreator工具来修改中文字体的“font name” 该工具大家可以在网上下载,这里简单介绍下如何使用该工具来修改

    A、 使用fontcreator 工具打开选定的中文字体,如“微软雅黑”

    B、 选择菜单中“Format”,选择“Naming”出现如下图:

    在“Platform”中选择“Microsoft unicode BMP only”,在“Language”中选择“Chinese-PRC”

    注意其中的“Include font family name”、“Include unique font identifier” 和“Include full font name”选项,由于该fontcreator工具没有汉化,所有这些选项显示都是字符而不是具体的中文字体的名称

    C、 在上面的界面中在“Language”选择“English-united states”出现如下图:

    同时注意其中的“Include font family name”、“Include unique font identifier” 和“Include full font name”选项,这些选项都包含了“Microsoft YaHei”的字样

    D、 开始修改:把C步骤中的“Microsoft YaHei”字样内容复制到B步骤中的相应选项中,如下图:

    修改后按“ok”,并保存该字体。

    E、 同时修改.fntdef 中的内容:

    AddFontToProcess C:"SampleFonts"MSYH.ttf

    SelectFont "WE:400,FN:Microsoft YaHei"

    #import upper case letters

    ImportRange 32 126

    ImportRange 19968 40869

    这样你重新运行Tfconvert工具进行转换的时候就不会出现如下的错误提示:

    说明:上面所修改的选项中的内容可以替换为MsYaHei ,或其他可以代表微软雅黑字体的英文名称都可以,同时你可以试着把这些选项的内容替换为“宋体”,这样你用Tfconvert进行转换的时候也不会出现错误提示。个人认为在.Net Micro Framework 的中文字体转换中目前只支持以中文“宋体”为face name(FN)的转换,其他像微软雅黑、华文细黑、幼圆为显示名称的中文字体,都要把名称修改为英文名称才能正常转换。

    下图显示的是经过上述处理后的华文行楷字体:

    参考资料:

    http://blog.csdn.net/yefanqiu/archive/2007/11/01/1862300.aspx

  • 相关阅读:
    android11——Material Design
    android10——Internet
    Andrid09——Service
    Android08——MultiMedia
    Android07——ContentProvider
    Android06——Persistence
    <转>汇编源码调试
    编程中我犯过的错误一
    中国社会9大阶层划分,看看你在哪一层?
    汇编中如果汇编和调用API混合用的话要注意Pushad popad
  • 原文地址:https://www.cnblogs.com/chuncn/p/1584892.html
Copyright © 2020-2023  润新知