0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于BMP文件格式存储汉字字库的汉字显示解决方案

电子设计 来源:现代电子技术 作者:何英高 2021-03-17 13:48 次阅读

1 引 言

高通作为全球领先CDMA手机平台供应商,在国内得到广大手机设计公司和手机厂商的青睐,其中包括德信无线、上海精佑、赛龙上海和UT斯达康等国内许多手机设计公司和手机厂商。为了支持国内市场,汉字显示是必不可少的,而高通手机平台上没有直接提供完备的汉字显示解决方案,本文就这个热点论题,通过对高通手机平台字符显示特点进行了分析,具体地给出了基于BMP文件格式存储汉字字库的一种汉字显示方案。

2 高通手机平台Brew字符显示原理

高通手机平台Brew字符显示由两部分构成,一部分为上层应用提供一个统一的字符显示接口部分,另一部分为某一种字符集或字体具体实现部分,这两个部分是通过虚函数机制绑定在一起。在Brew字符显示接口统一定义如下:

IFONT AddRef():用于引用记数功能;

IFONT_Release():释放当前应用程序字符显示实例;

IFONT_QueryInterface():他根据字符ID检索当前应用程序字符显示实例;

IFON_DrawText():他用于显示具体的文本;

IFONT_MeasureText():他用于计算以象素为单位文本的大小和字符的总数目;

IFONT_GetFontInfo():他用于检索字符相关信息,比如ascent和descent的值。

从上面的显示接口定义可见,系统的设计者将字符显示接口视为一个脱离依赖具体字符显示的转换模块,而字符具体实现部分则需要根据显示接口每个接口函数给出一个标准实现,功能就是针对某一种字符实现文本显示,计算文本大小,返回该种字体一些信息等。

例如:高通关于ASCII字符显示的参考设计中就定义了一组与显示接口一致的一组函数:

现代电子技术

然后通过指针赋值方式把这组函数与接口函数对应部分关联起来,即在函数AEEVarBitFont_NewFromBBF内部通过指针赋值方式使显示接口部分与具体实现部分绑定在一起。

上层应用模块调用字符显示模块的过程如下:

3 高通手机平台上汉宇字库的BMP文件存储结构的设计

在手机平台上汉字显示可以采用国标码或Unicode任何一种编码方案,但为了信息交换方便,大多数手机开发采用Unicode显示方式,这里以Unicode为例来说明。传统的汉字存储结构采用数组方式,明显地,字符集这种存储方式无法直观地显示给用户和软件开发者,用户和软件开发者也很难了解字符集内真正包含了那些字符,再者,当显示汉字时,系统需要将汉字字模存储方式转换为屏幕显示方式,这将会增加系统开销,降低运行效率。这里设计了用BMP文件格式来存储汉字字库,他保证整个存储空间没有明显增加的同时,能够使用户直观地了解字符集内包含了那些字符,提高系统运行效率。

与现有其他的汉字存储结构和汉字显示方法相比,该方法具有3个主要特点:

直观性强 由于采用BMP图片存储结构方式,可以浏览汉字字符集中包含的汉字;

运行效率高 由于采用BMP图片存储结构方式,使得单个字符的字模存储方式与屏幕显示方式保持一致,当显示汉字时,不需要把汉字字模存储方式转换为屏幕显示方式;

可移植性强、开发周期较短 对上层应用模块汉字显示耦合得更好,由于这种方法尽可能地采用了Brew系统现有的字符显示参考设计和已有的显示接口机制。

由于汉字的Unicode编码范围为u4E00~u9FA5和uF900~uFA2D,如果不在这个范围内就不是汉字了。为了讨论方便,这里考虑汉字Unicode编码范围为u4E00~ugFA5,总计有20 901个汉字,他们是连续编码的。

16*16汉字字库BMP文件格式描述如下:

从上面的存储结构可知,他实际就是一幅BMP格式的汉字字库图片,这幅BMP图片就是汉字字符集的二进制表示,他是从BMP图片格式转换过来的。这里每个字符字模对应BMP图片中一个图片片,字模存储方式与屏幕显示方式是一致的。

4 基于BMP文件存储结构汉字显示实现

实现本地汉字显示较早的一种方案基于Native UI,他不需依赖Brew显示接口。目前较多的汉字显示方案会涉及到Brew显示接口,常见汉字显示解决方案为:

(1) 基于Native UI方案,实现汉字显示。完全自己开发一套点阵存储、点阵获取、点阵显示、汉字显示函数,使用者使用特定的汉字显示函数把汉字显示出来。该方法具有最大的灵活性,甚至不理睬Brew任何显示接口机制,直接在上层组件里实现,但这种方法使程序可移植性比较差,对第三方应用程序汉字显示支持也不方便。

(2) 基于Brew方案,实现汉字显示。自己开发点阵存储、点阵获取、点阵显示,改造Brew的显示接口函数,使其能判断汉字码,一旦判断出汉字码,则使用自己开发的点阵获取、点阵显示等把汉字显示出来。然后把该自己开发的显示函数绑接到Brew显示接口上。该方法对点阵的操作更加灵活,工作量较大,开发周期较长,这种方法比较适用已有成熟的点阵操作方法开发者。

这里利用Brew对BMP文件格式的支持,使用BMP文件格式实现对汉字的点阵存储、点阵获取、点阵显示的全过程,并使用Brew的显示函数实现汉字码到汉字显示。这种方法尽可能地使用了Brew系统现有的字符显示参考设计和已有的显示接口机制,开发周期较短,是最根本的解决方法,他使得Brew的其他上层应用模块能很方便实现汉字显示。这种方法使程序通用性好,可移植性强,支持第三方应用程序开发也较方便等特点。

为了支持第三方软件厂商集成不同国家文字显示,高通手机平台提供一个绑定显示接口和对应的实现部分的接口函数,通过这个函数就可以把各种不同文字类型显示方式绑定到Brew统一的显示接口上,软件厂商只需要根据具体文字的显示方式实现具体的接口函数即可。这个接口如下:

各个参数介绍如下

IFont**ppif:汉字接口函数;

const uint16*pwGlyphs:汉字码表;

int cntGlyphs:汉字总数目;

const CHAR*pbyBitmap:用BMP表示的汉字字库;

int cbBitmap:用BMP表示的汉字字库总的字节数目;

int xCHARWid:每个汉字宽度;

int yCHARHeight:每个汉字高度;

int yCHARDescent:点阵打点开始位置在baseline之下的偏移;

uint16 wUndefGlyph:未定义的ASCII字符数目;

int nHalfCHARs:ASCII字符数目;

UTFONTTYPE FontType:汉字类型。

为了实现BMP文件格式存储结构字库的汉字显示方式,主要工作集中于下面两个方面:

(1) 定义创建字体实例接口函数

在Brew方案中,上层应用模块都是通过ID创建字体实例,这里可以按照如下方式定义创建字体接口函数。

(2) 实现汉字显示一组具体的接口函数

由于Brew方案中已经实现了基于BMP格式对ASCII码显示支持方式,所以显示接口函数IFONT_Ad-dRef(),IFONT_Release(),IFONT_QueryInterface的功能已经实现,而汉字显示方式这三个函数要实现的功能与ASCII是一致的,不需要改动。函数IFONT GetFon-tInfo对于汉字显示不适用,因为汉字的ascent和descent的值为0,这里只要考虑IFONT_DrawText()和IFONTMeasureText()两个函数的实现问题。

为了实现IFONT_MeasureText(),在他对应的实现函数内部增加计算一个汉字宽度的相应代码。

为了实现IFONT_DrawText(),由于Brew提供了基于BMP格式对ASCII码显示支持方式,对于汉字显示关键是计算汉字UNICODE码与BMP格式的汉字字模的对应关系。由于汉字的UNICODE码是连续,在BMP图片中字模已经按照UNICODE码顺序排列,对于任何汉字只要计算他与第一个汉字(4E00)的偏移量,然后根据偏移量直接拷贝BMP图片中该字符的图片片到显示缓冲区即可,不需要把单个字符字模转换为屏幕显示方式,提高了系统显示速度。

5 注意事项

在实际开发中,手机软件开发商一般以点阵形式从第三方购买字库,为了能够应用第三方字库到高通手机平台上需要转换成BMP格式的文件。另一个要注意的问题是这里把汉字显示作为单独的一个字符集来考虑的,在实际中可以把ASCII,汉字和汉字偏旁部首构成一个字符集来考虑。只要根据不同的码值分别计算他们各自对应BMP图形的偏移量即可。

6 结 语

本文就高通手机平台关于汉字存储和汉字显示方式这一热门论题进行了详尽讨论,论述高通手机平台Brew字符显示原理、传统汉字存储结构的不足和不同汉字显示方案的特点,并在论述这些原理和方案的同时提出了一种具有通用强,移植方便和容易扩展的汉字显示方案,也提出了在实际应用需要注意问题。

责任编辑:gt

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 高通
    +关注

    关注

    76

    文章

    7445

    浏览量

    190396
  • 手机
    +关注

    关注

    35

    文章

    6855

    浏览量

    157449
收藏 人收藏

    评论

    相关推荐

    EPS文件格式如何转换 EPS和SVG文件的区别

    EPS文件格式转换 EPS(Encapsulated PostScript)是一种用于存储矢量图形的文件格式,最初由Adobe公司开发。由于EPS文件在打印时能够保持极高的质量,并且广
    的头像 发表于 11-19 10:31 196次阅读

    常用对象文件格式

    电子发烧友网站提供《常用对象文件格式.pdf》资料免费下载
    发表于 10-15 09:25 0次下载
    常用对象<b class='flag-5'>文件格式</b>

    发掘3D文件格式的无限潜力:打造沉浸式虚拟世界

    在当今数字化时代,3D技术的应用范围日益广泛,涵盖电影后期制作、产品原型设计、虚拟现实(VR)、增强现实(AR)、游戏等众多领域。而3D文件格式作为3D技术的核心组成部分,对于实现3D数据和模型的存储、共享和操作至关重要。
    的头像 发表于 09-26 18:14 1462次阅读
    发掘3D<b class='flag-5'>文件格式</b>的无限潜力:打造沉浸式虚拟世界

    单片机驱动彩屏最简方案:单片机_RA8889最小开发板驱动控制TFT彩屏介绍(一)

    界面可以采用JPG图片,因此FLASH容量可以很小。 可以 自建全套汉字字库 ,比如24x24,32x32点,字库不大,可以打包存入FLASH,再利用RA8889的DMA读取,结合芯片BTE算法,可
    发表于 08-22 17:31

    请问stm32g431rbt怎么显示汉字

    stm32g431rbt怎么显示汉字
    发表于 07-22 07:27

    如何在esp32_tft显示汉字和修改大小?

    如何在 esp32_tft 显示汉字和修改大小? 现在的 16x16 太大。
    发表于 06-28 13:01

    12864B 带汉字库的液晶屏 与 arduino 连接 ,你是否顺利显示

    arduino 驱动带汉字库的12864B
    的头像 发表于 05-20 14:16 1542次阅读
    12864B 带<b class='flag-5'>汉字库</b>的液晶屏 与 arduino 连接 ,你是否顺利<b class='flag-5'>显示</b>

    visual programmer打开的文件格式有.s19, .hex , .sx 三种文件格式有什么区别吗?

    st visual programmer打开的文件格式有.s19, .hex,.sx三种文件格式有什么区别吗?是不是不同芯片的文件格式不一样,还是所有的芯片都可以使用这三种文件格式
    发表于 04-28 08:56

    使用iconview控件时,能否直接从sd卡中读取bmp格式的图片进行显示啊 ?

    请教下,使用 iconview 控件时,能否直接从sd卡中读取bmp格式的图片进行显示啊 ? 我看很多貌似都是 先把 图片文件转换为 .c 或者是 .dat
    发表于 04-28 08:11

    STemWin fatfs编码格式冲突怎么解决?

    最近手上有一个项目,需要用到STemWin,fatfs和sd卡,由于STemWin显示汉字用的XBF格式,xbf格式汉字用的是UTF-8
    发表于 04-12 08:12

    Blender 4.1发布,引入新文件处理API,支持更多文件格式

    此次Blender 4.1引人瞩目的特点在于,全新升级后的API使得开发者可通过拖放行为,从全新的角度扩展文件处理操作。此外,新增对Alembic、Collada、Grease Pencil SVG、OBJ、OpenUSD、PLY和STL文件格式的支持,进一步拓展了传播路
    的头像 发表于 03-27 15:32 606次阅读

    谷歌模型怎么PS打开文件格式不变

    要将谷歌模型与Photoshop结合使用,并保持文件格式不变,这通常涉及将谷歌模型生成的图像或图形导入到Photoshop中进行进一步编辑或处理。
    的头像 发表于 02-29 18:09 830次阅读

    谷歌模型怎么用手机打开文件格式

    谷歌在其AI技术中集成了多种工具和功能,用于处理和识别文件格式。具体到手机上打开的文件格式,这主要依赖于谷歌提供的服务和应用。例如,在Gmail中,用户可以直接查看多种格式文件,包括
    的头像 发表于 02-29 17:38 844次阅读

    PackagingTool_x64_v2.0.1.0图片转档打包二进制文件合并字库生成图片软件介绍

    ; (6) 新增工具:【 点阵字库转成图片 】,可将点阵字库转成BMP或者JPG图片,便于UI设计; (7) 完善功能:文件信息插入bin文件
    发表于 02-29 09:30

    ad7177-2硬件文件EVAL-AD7177-2SDZ-Hardware-RevE.zip是什么文件格式

    因为想用一下ad7177-2,下载了ad7177-2开发板硬件文件 EVAL-AD7177-2SDZ-Hardware-RevE.zip,解压缩后打不开,请问它们是什么文件格式?谢谢了
    发表于 12-14 08:21