2638|2

447

帖子

3

TA的资源

管理员

楼主
 

MPLAB® Harmony之学习篇(十)--在图形项目中增加中文字体 [复制链接]

本文转自Microchip麦田论坛——作者:炮灰哥



《MPLAB® HarmonyHarmony之学习篇(九)创建图形开发项目》中我们提到了在图形开发的过程中要用到各种不同的字体。通常情况下,英文等拉丁语系由于字符不多,是非常容易添加的,但是对于中文等字体的显示,由于字符非常多,必须考虑存储容量的限制。
本文通过建立一个工程,显示简单的中文字符,介绍如何对字库进行裁剪,选取自己想要的字符。

本文将讨论以下内容:

  • 字符的相关基础知识
  • 如何在项目中增加中文字库




计算机字符相关知识

计算机中使用的字库是Unicode码
Unicode码为所有字符分配了地址区间

0000:Basic Latin 基本拉丁语
0080:Latin-1 Supplement 拉丁语-1补遗
0100:Latin Extended-A 拉丁语扩充-A
0180:Latin Extended-B 拉丁语扩充-B
0250:IPA Extensions 国际音标
02B0:Spacing Modifier Letters
0300:Combining Diacritical Marks 组合变音符
0370:Greek and Coptic 希腊语和埃及语
0400:Cyrillic 西里尔文
0500:Cyrillic Supplement 西里尔文补遗
0530:Armenian 亚美尼亚语
0590:Hebrew 希伯来语
0600:Arabic 阿拉伯语
0700:Syriac 叙利亚语
0780:Thaana 马尔代夫语
0900:Devanagari 梵文
0980:Bengali 孟加拉语
0A00:Gurmukhi 果鲁穆奇语
0A80:Gujarati 古吉特拉语
0B00:Oriya 奥里雅语
0B80:Tamil 泰米尔语
0C00:Telugu 泰卢固语
0C80:Kannada 埃纳德语
0D00:Malayalam 马拉雅拉姆语
0D80:Sinhala 锡兰语
0E00:Thai 泰国语
0E80:Lao 老挝语
0F00:Tibetan 西藏语
1000:Myanmar 玛雅语
10A0:Georgian 格鲁吉亚语
1100:Hangul Jamo (一种特殊韩文)
1200:ethiopic 埃塞俄比亚语
13A0:Cherokee 切罗基语
1400:Unified Canadian Aboriginal Syllabic
1680:Ogham 欧甘字母
16A0:Runic 古代北欧文字
1700:Tagalog 塔加拉语
1720:Hanunoo
1740:Buhid
1760:Tagbanwa
1780:Khmer 高棉语
1800:Mongolian 蒙古语
1900:Limbu
1950:Tai Le
19E0:Khmer Symbols 孟高棉语符号
1D00:Phonetic Extensions 语音扩充
1E00:Latin Extended Additional 拉丁扩充附加
1F00:Greek Extended 希腊语扩充
2000:General Punctuation 通用标点
2070:Superscripts and Subscripts 上标和下标
20A0:Currency Symbols 货币符号
20D0:Combining Marks for Symbols
2100:Letterlike Symbols
2150:Number Forms 数字形式
2190:Arrows 箭头
2200:Mathematical Operators 数学运算符
2300:Miscellaneous Technical 零杂技术用符号
2400:Control Pictures
2440:Optical Character Recognition
2460:enclosed Alphanumerics 带圈和括号的数字与字母
2500:Box Drawing 边框
2580:Block Elements 方块
25A0:Geometric Shapes 几何形状
2600:Miscellaneous Symbols 零杂符号
2700:Dingbats 丁贝符
27D0:Miscellaneous Mathematical Symbols-A 零杂数学符号
27F0:Supplemental Arrows-A 扩充箭头A
2800:Braille Patterns 盲文
2900:Supplemental Arrows-B 扩充箭头B
2980:Miscellaneous Mathematical Symbols-B 零杂数学符号B
2A00:Supplemental Mathematical Operators 扩充的数学运算符
2B00:Miscellaneous Symbols and Arrows 零杂符号和箭头
2E80:CJK Radicals Supplement CJK词根补遗
2F00:Kangxi Radicals Kangxi词根
2FF0:Ideographic Description Characters 表意符号
3000:CJK Symbols and Punctuation CJK符号和标点
3040:Hiragana 平假名
30A0:Katakana 片假名
3100:Bopomofo 汉语注音符号
3130:Hangul Compatibility Jamo
3190:Kanbun
31A0:Bopomofo Extended 汉语注音符号扩充
31F0:Katakana Phonetic Extensions
3200:enclosed CJK Letters and Months 带圈的CJK字母和月份
3300:CJK Compatibility CJK兼容
3400:CJK Unified Ideographs Extension A (1.5MB) CJK统一象形文字扩展A
4DC0:Yijing Hexagram Symbols 易经符号
4E00:CJK Unified Ideographs (5MB) CJK统一象形文字
A000:Yi Syllables 彝语音节
A490:Yi Radicals 彝语词根
AC00:Hangul Syllables (7MB) Hangul音节
D800:High Surrogates 高代用品
DC00:Low Surrogates 低代用品
E000:Private Use Area 私人保留区
F900:CJK Compatibility Ideographs CJK兼容象形文字
FB00:Alphabetic Presentation Forms 字母序的表象符
FB50:Arabic Presentation Forms-A 阿拉伯表象符A
FE00:Variation Selectors
FE20:Combining Half Marks
FE30:CJK Compatibility Forms
FE50:Small Form Variants
FE70:Arabic Presentation Forms-B 阿拉伯表象符-B
FF00:Halfwidth and Fullwidth Forms 半宽和全宽形式
FFF0:Specials 特殊符号
为中文字符分配的区间是4E00-9FBF27484个字,对应GB18030中所有汉字。

通过上述描述我们可以看到,汉字字库包含了两万多个字符,把所有的汉字字库都存进Flash这对于一般的MCU来说是不现实的,一个现实的方法就是将需要用到的字符挑选出来,Harmony的图形开发工具集成了Font Filter的功能,可以将客户用到的字体挑选出来生成一个量身定制的字库,大大节约了Flash空间。

增加中文字库的步骤

A,建立一个图形开发项目
基于Harmony的图形开发项目是增加字体显示的基础,请参考《Harmony之学习篇(九)创建一个图形开发项目》文档建立一个基于Harmony的图形开发项目。


B,在MHGC中选择使用字体


这一步是在MHC进行选择的,通过该选择可以使能字符显示相关接口函数。

C,选择字符格式为16位

如果是中文显示,必须将FontCharacter Size选择为GFX_FONT_SIZE_16,这是因为中文字库的Unicode码是16位。

D,在Asset中添加字库
在《Harmony之学习篇(九)创建一个图形开发项目》中我们已经介绍了如何进入MHGC进行图形开发,并对MHGC各功能区进行了讲解。
当我们需要添加需要的字库时,只需要在ComposerManagement功能区Import一个字库就可以了。

Harmony增加字库的两种方法:

1. 从系统安装文件选取,这种方法适合直接从Windows已经安装的字体中选择合适的字体;
2. 从字库文件中选取,这种方法适合各种订制的字体。


下面介绍一下如何从系统字库中增加需要的字库




E,选择需要用到的字符的范围
从Composer Management中选择Edit,也可以直接对字库进行修改。

在Font Edit Dialog页面可以修改字体的Size,字体的Style和字体的范围,点击Edit ImportRanges可以进入字符范围修改页面。
在Font Character ImportRanges可以添加需要的字符范围,用户可以在网上免费查询字符对应的Unicode码,如果要显示某个字,需要将该字符的Unicode码添加到Font Character Import Ranges中。



在本示例中,我们准备显示“中国”这两个字,所以需要将“中”(Unicode码为20013)和“国”(Unicode码为22269)增加到显示的范围中。
关于每个中文字符的Unicode码,可以在很多网站免费查到。


F,建立一种风格Scheme,将该风格的字体设置为已经添加好的字体







G,应用该风格,在显示对象的Properties区设置该显示对象的风格,选择为已经设置好的某种风格。





总结

1,中文字库的显示与英文显示的区别:


由于中文字库占有2万多Unicode码编号,所以在实际的应用中我们通常需要对中文字库进行一定的筛选,以减少Flash的存储空间。

在筛选字库的时候,记得要选择中文字库的Unicode码范围4E00-9FBF。





2,字库的来源可以使操作系统已经安装的字库,也可以来自单独的字库文件
在添加中文字库的时候,可以选择系统的字库,如果系统的字库不能满足要求,也可以使用一些*.ttf,*.fnt等字库文件,使用字库文件的时候要注意字库版权的问题,当然,在一些网站上也提供一些免费的字库供使用。


点击下载例子程序: mhgc_chinesefont.zip (2.68 MB)


加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身

最新回复

MPLAB® Harmony在图形项目中增加中文字体不知道对LCD类型有何特定要求否,比如针对TFT模块或点阵LCD模块是否都通用?  详情 回复 发表于 2016-12-13 09:56
点赞 关注
 

回复
举报

129

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
MPLAB® Harmony的理念就很不错,下层和中间层繁琐的东西交给你们来搞定,用户只需要专注于应用层面的开发,在这个产品更新迭代速度前所未有的时代,这显然是产品开发者们的福音。而且看了这篇,这个平台的图形界面对中文字库的支持是如此方便,相信这个平台会大有作为的。
 
 
 

回复

374

帖子

3

TA的资源

一粒金砂(高级)

板凳
 
MPLAB® Harmony在图形项目中增加中文字体不知道对LCD类型有何特定要求否,比如针对TFT模块或点阵LCD模块是否都通用?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表