.Net Micro Framework研究—中文显示

简介: 试验平台:.Net Micro Framework 模拟器 微软示例程序中,仅支持两种字体(small.tinyfnt和NinaB.tinyfnt),并不支持中文。

试验平台:.Net Micro Framework 模拟器

 

微软示例程序中,仅支持两种字体(small.tinyfntNinaB.tinyfnt),并不支持中文。

翁祖泉老师在《如何在Microsoft .NET Micro Framework 的应用程序中添加中文字体?》的文章中,写了如何添加字体的方法,正如他文章所写,这是一篇介绍在.NET Micro Framework 应用程序中使用中文字体的初级入门文章。所以我觉得有必要再深入研究一下。上篇文章的链接:http://www.winbile.net/Detail.aspx?D=260,1118125,855,127 在看我的文章之前,一定先看看这篇文章,我写的内容只是这篇文章的一个补充。

MF平台支持的字体是专有格式,扩展名为tinyfnt,需要用专门的转化工具才能把windows平台上的字体转换为tinyfnt字体。

转换工具在MF SDK开发包中就有,安装后的位置为:C:/Program Files/Microsoft .NET Micro Framework/v2.0.3036/Tools/TFConvert.exe

要转换字体,需要三个条件:第一,转换工具,这个我们已经有了;第二,中文字库,直接在C:/WINDOWS/Fonts目录中选一个你需要转换的字体即可;第三,转换用的配置文件(扩展名为fntdef的文件,这个比较麻烦,我着重说一下。

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

1AddFontToProcess

格式:AddFontToProcess path

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

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

格式:SelectFont "selectionstring"

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

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

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

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

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

ITItalic)设置字体的倾斜角度

UNUnderline)设置字体下面的下划线

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

格式:ImportRange start end

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

 

详细的介绍在msdn上有相关说明(很可惜是英文的):ms-help://MS.VSCC.v80/MS.VSIPCC.v80/MSVS.PSDK/PSDK/PSDK_TF_Fntdef.htm

 

配置文件内容示例:

AddFontToProcess C:/SampleFonts/MSYH.ttf
SelectFont "WE:400,FN:
宋体"
ImportRange 19968 40869

 

注意上面的示例文件仅导出了常用的汉字,如果你用该字体显示中英文混合的字符串,你会发现其它字体全部是空格,这显然不是我们想要的结果,所以我们导出的字体不仅有中文、英文字符,还要有必要的标点符号,所以我们要用多个ImportRange 命令。

 

这是我写的配置文件,我导出字体为华文细黑字体。

AddFontToProcess D:/SELF/MF/china/STXIHEI.TTF

SelectFont "WE:400,FN:宋体"

#英文字母和常用符号

ImportRange 32 126

#罗马数字

ImportRange 8544 8569

#各个方向的箭头

ImportRange 8592  8601

#1~10 圆圈内嵌数字

ImportRange 9312 9321

#有用的符号

ImportRange 9600 9835

#汉字

ImportRange 19968 40869

 

导出的大小为:695K,原字体大小9540K,不过与英文字库相比还是大的多。

如果在MF上的应用汉字很少,可以仅导出使用的字符。从这点出发,似乎根据使用的字符串,自动导出生成相应的字体库的程序又有了用武之地(以前我们在西文DOS下,显示中文字体就这么做过)。

说做就做,下面就是我完成的程序(原理很简单,根据区位码导出字符)。

(图MF071101001.jpg

我们只转换“[叶帆工作室]欢迎您”这几个字,最后我们转换的字库仅456个字节,与695K相比那差好多数量级,是不是很棒?!如果我们把上面的程序改进一下,也许可以自动根据代码创建相应的字库文件了,那就更棒了。

下面就把我们的字库加入到程序,用模拟器试一下,看看是否能正确显示汉字。

(图MF071101002.jpg

是不是很棒J

相关代码如下(记得先在资源中添加我们转换后的字库文件):

using System;

using Microsoft.SPOT;

using Microsoft.SPOT.Input;

using Microsoft.SPOT.Presentation;

using Microsoft.SPOT.Presentation.Controls;

namespace HZTest

{

    public class Program : Microsoft.SPOT.Application

    {

        public static void Main()

        {

            Program myApplication = new Program();

 

            Window mainWindow = myApplication.CreateWindow();

            // Create the object that configures the GPIO pins to buttons.

            GPIOButtonInputProvider inputProvider = new GPIOButtonInputProvider(null);

            // Start the application

            myApplication.Run(mainWindow);

        }

        private Window mainWindow;

        public Window CreateWindow()

        {

            // Create a window object and set its size to the

            // size of the display.

            mainWindow = new Window();

            mainWindow.Height = SystemMetrics.ScreenHeight;

            mainWindow.Width = SystemMetrics.ScreenWidth;

            // Create a single text control.

            Text text = new Text();

            //设置字体 yf.tinyfnt

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

            text.TextContent = "[叶帆工作室]欢迎您";

 

            text.HorizontalAlignment = Microsoft.SPOT.Presentation.HorizontalAlignment.Center;

            text.VerticalAlignment = Microsoft.SPOT.Presentation.VerticalAlignment.Center;

            // Add the text control to the window.

            mainWindow.Child = text;

            // Connect the button handler to all of the buttons.

            mainWindow.AddHandler(Buttons.ButtonUpEvent, new ButtonEventHandler(OnButtonUp), false);

            // Set the window visibility to visible.

            mainWindow.Visibility = Visibility.Visible;

            // Attach the button focus to the window.

            Buttons.Focus(mainWindow);

            return mainWindow;

        }

        private void OnButtonUp(object sender, ButtonEventArgs e)

        {

            // Print the button code to the Visual Studio output window.

            Debug.Print(e.Button.ToString());

        }

    }

}

 

文字部分就先介绍到这里,下面的几篇文章就该介绍一下图形方面的内容了,等图形掌握了,相信最后我们一定能在MF平台上实现一个很棒的应用。

 

相关文章
|
2月前
使用的是.NET Framework 4.0,并且需要使用SMTP协议发送电子邮件
使用的是.NET Framework 4.0,并且需要使用SMTP协议发送电子邮件
49 1
|
2月前
|
开发框架 缓存 监控
NET Framework 到 .NET 5/6 的迁移是重大的升级
本文详细介绍了从 .NET Framework 4.8 迁移到 .NET 5/6 的过程,通过具体案例分析了迁移策略与最佳实践,包括技术栈评估、代码迁移、依赖项更新及数据库访问层的调整,强调了分阶段迁移、保持代码可维护性及性能监控的重要性。
59 3
|
2月前
|
机器学习/深度学习 编解码 算法
【小样本图像分割-4】nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation
《nnU-Net: 自适应框架用于基于U-Net的医学图像分割》是一篇2018年的论文,发表在Nature上。该研究提出了一种自适应的医学图像分割框架nnU-Net,能够自动调整模型的超参数以适应不同的数据集。通过2D和3D U-Net及级联U-Net的组合,nnU-Net在10个医学分割数据集上取得了卓越的性能,无需手动调整。该方法强调数据增强、预处理和训练策略等技巧,为医学图像分割提供了一个强大的解决方案。
82 0
【小样本图像分割-4】nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
本文讨论了在基于.NET 6和.NET Framework的WinForms项目中添加图表控件的不同方法。由于.NET 6的WinForms项目默认不包含Chart控件,可以通过NuGet包管理器安装如ScottPlot等图表插件。而对于基于.NET Framework的WinForms项目,Chart控件是默认存在的,也可以通过NuGet安装额外的图表插件,例如LiveCharts。文中提供了通过NuGet添加图表控件的步骤和截图说明。
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
|
4月前
|
开发框架 缓存 前端开发
实战.NET Framework 迁移到 .NET 5/6
从.NET Framework 迁移到.NET 5/6 是一次重要的技术革新,涵盖开发环境与应用架构的全面升级。本文通过具体案例详细解析迁移流程,包括评估现有应用、利用.NET Portability Analyzer 工具识别可移植代码、创建新项目、逐步迁移代码及处理依赖项更新等关键步骤。特别关注命名空间调整、JSON 序列化工具更换及数据库访问层重构等内容,旨在帮助开发者掌握最佳实践,确保迁移过程平稳高效,同时提升应用性能与可维护性。
148 2
|
4月前
|
开发框架 JSON 监控
实战指南:从 .NET Framework 迁移到 .NET 5/6 的策略与最佳实践
【8月更文挑战第28天】从 .NET Framework 迁移到 .NET 5/6 是一次重要的技术升级,涉及开发环境与应用架构的改进。本文通过具体案例分析,介绍迁移策略与最佳实践,帮助开发者顺利完成转变。
89 1
|
4月前
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
|
4月前
|
XML JSON 程序员
总结一下 .NET FrameWork 和 .NET Core 创建的项目的不同点
总结一下 .NET FrameWork 和 .NET Core 创建的项目的不同点
104 0
|
4月前
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
分享一份 .NET Core 简单的自带日志系统配置,平时做一些测试或个人代码研究,用它就可以了
|
4月前
|
消息中间件 开发框架 .NET
闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?