UEFI 之 中文显示 概要 对应EDK2 默认支持中文和法文两种语言,对于中国用户而言,提供中文提示可以帮助我们建立更好的用户体验。那么如何在BIOS中显示中文呢,我们分成两个部分,第一部分介绍字符编码理论,第二部分介绍UEFI注册使用Unicode:不涉及字符是怎么在字节中表示的,它仅仅指定了字符对应的数字,仅此而已。他的编码和传输的问题是UTF(Unicode Transformation Formats)定义的也就是我们通常会遇到的UTF-8,UTF-16和UTF-32。UEFI中的字符串统一采用Unicode的UCS-2编码,标准的UCS-2编码,即每个字符占两个字节,字符串长度=编码长度 / 2 EDK2 中字体的显示原理 UEFI 中 使用了SimpleFont格式。SimpleFont是一种点阵字体,有两种格式,一种是窄体字,一种是宽体字。窄体字是一种8×19的点阵字库,宽体字是16×19的点阵字库,分成两半,前一半表示左边部分,后一半表示右边部分。点阵字库中每一位(bit)代表一个像素,有色是1,空白是0。 EDK2 中代码实现 HiiAddPackages的形式注册字体点阵到HII的数据仓库中。 注册英文和法问的窄字体 在EDKII的GraphicConsoleDxe驱动中有现成的例子。窄体字点阵 结构体位置:MdePkg/Include/Uefi/UefiInternalFormRepresentation.h 注册中文的宽字体 生成宽字体的点阵做高效的还是《UEFI 原理与编程》中提到的,使用Javascript代码批量生成,需要说明的是,这个生成的字体是有误差的,会出现字体边锯齿形,还发虚的问题,宽字体还好点,窄字体更明显; 宽字体js脚本实现如附件一:窄字体js脚本实现如附件二: 由于js脚本生成的的窄字体特别虚无法使用,所以改用了python脚本生成,生成的原理都是相同的,但是python中可以设置画布的值为0/1,所以每个像素点就两个状态0/1,这样就避免了虚的问题;窄字体python生成脚本如附件三: 宽字体 结构,MdePkg/Include/Uefi/UefiInternalFormRepresentation.h 注意:这里需要明确的几个概念,这些变量最好的体现就是Variable中,使用进行查看如下 这个变量标志着平台现在选择的语言,就是从PlatformLangCode中选择出的字符串,用区分的; 这个是平台默认支持的语言,在pcd中定义的,要包括Lang中定义的语言,语言要三个字母一组,没有间隔,起机会有接口验证,在Universal/BdsDxe/Language.c InitializeLangVariable 这个是平台支持语言的标示,是在pcd中定义的, 这个要与Strint 中的语言对应起来,PlatformLang就就是从这里取出来的字符串; 附录 附录一:宽字体生成js脚本 将以上代码放入浏览器中就可以生成显示的点阵数据,如下: 附录二:js生成8*19的点阵数据, 就是从汉字生成脚本修改而来的; 附件三:ttf 字体转换8*19成点阵数据
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/39507.html