矢量字库在嵌入式机顶盒中的应用

发布者:快乐阳光最新更新时间:2018-01-23 来源: 互联网关键字:矢量字库  嵌入式  机顶盒 手机看文章 扫描二维码
随时随地手机看文章

摘要:介绍嵌入式数字卫星接收机的字符显示原理。提出一种提取Windows矢量字库信息以及将其转换为点阵字库格式的方法。给出主要模块的流程图和VC程序实现。在DVB-S接收机顶盒系统中的应用验证了该方法的有效性。 关键词:矢量字库 机顶盒 字符转换 引言 在当前嵌入式系统设计中,广泛涉及到字符和图标的显示。过去的方法通常是使用硬件自带字库或者转换中文操作系统(例如UCDOS)的点阵字库,但随着嵌入式开发技术的发展,人们对用户界的要求也越来截止高,大小固定、字体有限、使用不便的点阵字库已经难再满足要求。


于是众多开发人员将目光投向了Windows操作系统丰富的字库和图标资源,以Widnows 2000系统为例,其OpenType矢量字库有基于Unicode内码的四万多个字符,特殊符号以及近百种字体可以选用。但是Windows系统结构复杂,难以直接提取矢量字库,并且矢量字库解析算法涉及到Micorosoft和Adobe公司OpenType字体专利,这些问题为Windows字库的使用带来了很大的困难。 


在笔者参与的DVB-S数字卫星接收机顶盒用户界面的设计工作中,也遇到了同样的问题。按照设计要求,需要用到一套完备的,支持包括俄、德、拉丁、阿拉伯等多种语言和特殊符号的小型字库,但是难以找到合适的现成字库,在参考了一些商业字模提取软件的功能后,提出了一种提取Windows矢量字符以及图标资源的方法,并用Visual C++6.0程序实现。实际应用表明,用本方法生成的字库字形美观,字体多样,完全可以替代商业字库,同时还具有使用方便,便于扩展等优点。


1 机顶盒图文显示原理 机顶盒中文字和位图的显示是通过OSD(图文屏显技术)模块完成的。传统的屏显示OSD主要应用在VCR、LD和电视机上,采用专用的芯片修改屏幕上指定部位的信号的角度和亮度,实现模拟视频的同步改变,从而达到显示的目的。含有OSD的视频输出信号在屏幕上从底向上以6个层次显示:边界颜色、静止视频图像、活动视频图像、OSD背窗口、OSD位图区域和OSD硬件游标。本文介绍的机顶盒系统是基于ST公司的方案,接收机软件是ST公司为其数字卫星接收机硬件评估板配套提供的。其主芯片采用Sti5518微控制器,内部集成OSD处理单元。OSD功能模块框图如图1所示。 


OSD功能模块位于NTSC/PAL/SECAM编码之前,包括一张颜色查找表(LUTs)、Alpha混合滤波器和控制逻辑单元,所有子功能先于将信息从重建缓冲区传到SDRAM或与其它静态图像混合前执行。


当要输出图文信息时,将字符图标的位图信息送至OSD位图区域的相应位置。OSD位图区域由其头部定义,每个OSD头主要包括OSD显示短形区域的起始位置、大小及两个分别指向顶场和底场图像数据的指针(这是针对隔行扫描显示方式;对于逐行扫描,这两个指针向同一块内存区域),还有一个指向下一个OSD位图数据头的指针。由于采用了这种基于指针的OSD数据管理结构,理论上OSD位图数据块的数目不受限制,实际上它要受到内存大小的限制。头部不仅定义了位图区域的尺寸、位置以及及颜色信息,而且提供了颜色表更新等功能。


字符的颜色设置使用OSD处理单元(LUT)的颜色查找表,也称做调色板。2位的LUT意味着有4种颜色可以选择,并且位图中的每个像素仅占有存储单元的2位。如果是透明文字,还要把第一个像素的调色板颜色值定为透明色掩码值,这个过程由Alpha混合处理完成。


如果输出像素不在OSD区域,停止处理视频接口处理器数据;如果输出像素在OSD区域,OSD数据或OSD和视频接口处理数据的混合数据经Alpha混合滤波处理后以16位YC(Cb,Cr)格式传输。对于调色板颜色值是透明的情况,则直接传送视频数据而略过OSD位图数据。 


OSD的软件部分可以分为两部分:硬件抽象层和图形函数接口。OSD模块软件部分为整个系统软件部分提供一系列的图形函数接口,是实现图文显示的基础,也是给用户提供一个方便直观的图形文字交互方式的保障。本文中硬件抽象层为ST公司提供的STAPI函数库,图形函数接口在中间件的基础上自行开发。 由此可见,在机顶盒系统中字符输出有三个主要步骤:


①系统专用字库的建立;


②字符数据的查找;


③调用OSD模块功能将字符在屏幕上输出。


下面介绍如何通过转换Windows矢量字符,建立一套功能完善,使用方便的字库系统。 


2 提取矢量字符 Winodws矢量字库存储汉字的矢量图形。因为存储的是笔样条,对于字符做旋转、缩放、甚至三维拉伸都不会产生失真,但在字符显示的时候需要计算样条曲线而增加了计算量。由于嵌入式系统只是针对专一控制应用的系统,处理器的性能和资源还不如PC机,一般使用的仍然是点阵字库。本文介绍的DVB-S机顶盒系统同样没有直接使用矢量字库;而是通过提取Windows中矢量字库的方法将矢量字符转换成相应的点阵信息。在本开发方案中,字库文件中所有汉字的字模信息和图标信息被存储到两个大的数组中,并作为一个头文件包含在汉字显示模块中。


利用计算出的偏移值得到字模数组中的下标,从而得到汉字存放在数组中的字模点阵信息。使用程序存储器空间做字库,这在汉字用量不大的情况下是一种较完美的解决方案。本系统中负责屏显功能的API函烽是STOSD函数库,里面已把位图的宽度定义为32像素的整数倍。这是由于系统的内存操作函数只能对16字节整数倍的块进行拷贝操作,否则内存只能一个字节一个字节地填充,速度非常慢。例如在16色的调色板情况下,无论是24%26;#215;24点阵还是32%26;#215;32点阵,基于字符单元宽度统一为32像素。一个宽为32像素,高为28像素的基本字符点阵信息需要一个大小为28字节的整型数组为记录。以开发方案为例,大小为500字符的24%26;#215;24点阵小型字库将需要24 000字节的ROM空间。


转换的关键是要获得矢量字库的点阵信息。程序中,回避了较困难的直接解板矢量字库问题,巧妙地从PC显示缓冲区中获得位映像数据,再将其转换成OSD模块函数支持的点阵格式。位图法转换矢量字符的算法如下。 


①把汉字以位图的形式显示在指定的32%26;#215;28的点阵区域内,然后按行提取像素点,每1行以8个像素点为1个字节(1行4个字节),以二进制补码的形式分别存放在4个字节里。最低字节存放每一点阵行的前8位。每一行结束后将其转化为十六进制点阵码并保存于一个整型数组中。 


②整个字符转换结束后放在字库信息文件里,生成一个字符区域地址映射表,为后面的字符分组查找提供方便。同时生成字符宽度、高度、字体、风格以及代码页等相关信息。 西文“特殊”字符(拉丁字符集里的第128~255字符,码值大于0x80)的转换是提取矢量字符过程中需要注意的问题。


通过VC 6.0开发环境可以把执行文件编译成Unicode和ASCII两片版本。对于Unicode内码版本的应用程序,Windows 2000对其字符的显示有着很好的支持,但对于ASCII版本的应用程序则存在一定问题。当在应征程序中输入字符时,因编辑框只支持单字节,系统会将双字节的Unicode输入字符重新解释,造成的后果是程序无法正确接收这些字符,输出的特殊字符也一律被显示为“?”。


本文的矢量字库提取程序为了和Win9x操作系统兼容而被设计为ASCII版本。为了解决上述问题,程序沿用了代码页的方法。代码页是一个内部表,操作系统将字符、数字和标点等符号映射为字符编号,不同的代码而支持不同国家所使用的字符集。代码页通过编号引用,例如,代码页932代表日 本字符集,950代表繁体中文字符集。由代码页确定字符集,首先把需要转换的特殊矢量字符编辑后以RTF富文本格式的文本保存,矢量字符提取程序打开RTF文件并插入文本到视图中,读取每个特殊字符的值并转换成十六进制。然后读取RTF文件内的代码页编号和字体,尺寸和风格等标签。根据代码页确定对应的字符集,根据标签设置显示字符属性。最后按一般字符的输出方法将特殊字符显示在视图中。


3 程序实现 


3.1 功能设计和界面设计 主程序为MFC生成的SDI单文档程序。


视图类由CscrollView派生,显示的字符和位图可以自由地放大和缩小,当字符超过窗口大小时视图自动滚动,以满足提取不同大小库点阵的需要,用一个RichEditBox控件来接收输入字符。添加静态控件,显示字符点阵的宽、高等信息。在菜单栏分别添加插入位图、插入图标、插入特殊字符、字体设置、字体放大和字体缩小等菜单项。 程序的界面如图2所示。图中程序正在提取阿拉伯矢量字符集,使用该程序时直接在该工具的图形操作界面下输入需要提取的字符或者插入位图和图标。待调整好全部所需的字符图标后点击保存,程序自动转换矢量字符和图形并生成存入文件。实现的功能有:


①能在视图显示RichEditBox控件内输入英文、汉字等矢量字符,并通过图形设备上下文CDC读取视图的点阵信息;


②能读取所有插入RTF文本内的特殊字体点阵信息;


③能读取插入的位图和图标点阵信息;④能将点阵信息保存在font.h文件中,并添加字库索引表和字符宽、高、字体等信息。


3.2 主要类和模块 CfontView为CscrollView派生类,负责字符和图标的缩放显示,CfontModule类封装了字符串操作函数,CtextSetDlg类负责字符属性的设定。程序中点阵信息的数据、位图和图标的数据和字符串数据分别封装在类CdotMatrix、CimageElemnt和CwordElement中。在主要的模块函数里,Create_Text_Dot_Matrix和Create_Bmp_Dot_Matrix函数是本程序的核心函数。功能是在内存中形式位映射数据,完成矢量汉字或矢量图形向点阵数据的转换。设向量图型尺寸宽width像素,高height像素,程序流程如下: ①计算该位图对应的缓冲区尺寸。每行长度为:BytePerLine=(width+1)/8,缓冲区大小为Buffersize=BytePerLine*height。


②申请内存缓冲区。如果内存不足以容纳整 个图形,则可以分段处理。 BufferPtr=(unsigned char*)malloc(BufferSize)。 


③计算坐标点在所申请内存缓冲区的偏移量和屏蔽位。设原点(0,0)在内存中的偏移量为0,则图中任意一点P(x,y)相对于原点(0,0)的偏移量为 offset=y*BytePerLine+x/8,该点对应的字节内屏蔽位为mask=0x80>>(X%8)。 


④读取点P(x,y)在内存中对应的颜色值Value,读取所在的字节。 byte=(unsigned char)*(Bufferptr+offset),取该点对应的位, Value=byte %26;amp; mask最后得到点阵信息,输出到屏幕或磁盘文件。 


3.3 主程序流程 主程序流程图如图3所示。首先进入响应用户消息分支,当从编辑框输入标准汉字或ASCII字符,程序检查字符同码判断字符有效性,若满足条件则跳至显示部分;当用户从外部磁盘插入图标或位图图片,程序直接读入文件数据;如果插入的是特殊字符则进入RTF格式文本解析部分,得到特殊字符的代码页、字体、大小等信息。然后将字符图标信息在视图中显示,此时可通过图形界面调整字符外观。通过获得内存中图像信息形成位映射数据,计算点阵数据。最后将字库点阵和索引表、字体、大小等附加信息按头文件格式保存到字库文件中。


4 结论 


实际应用中,本方法可以有关键人物 地提取Windows环境下矢量字库的字模,满足嵌入式机顶盒系统的开发需要。字模提取程序具有多种功能,可以生成各种大小风格的字体、符号和图形点阵信息,从而使机顶盒能利用Windows中丰富的字体和图像资源,显示更为精彩的图形用户界面。

关键字:矢量字库  嵌入式  机顶盒 引用地址:矢量字库在嵌入式机顶盒中的应用

上一篇:为什么在中国电子工程师不如搞软件的?
下一篇:带有LED警示灯的骑行夜服设计

推荐阅读最新更新时间:2024-05-03 02:21

基于FPGA的嵌入式脉象采集仪硬件电路设计
  脉诊作为中医最重要的一种诊断方式,具有模糊性、不确定性的特点,是近年来中医现代化研究中的热点。随着电子、计算机技术的快速进步,将嵌入式技术、 FPGA技术、IP核技术结合在一起,融合电子技术、信号处理方法等学科知识,在中医基本理论的指导下,设计脉象诊断设备,构建一个灵活高效,可扩展性强,可靠性高,功耗低,可便携的脉象采集仪具有重要的现实意义和良好的市场前景。   1 仪器总体设计   嵌入式脉象采集仪的前期设计目标是脉搏信号的采集、存储、显示、简单处理、通信等,后期要对所采集到的信号处理,得到脉象特征,对病人做出诊断。在 FPGA的选型时,不但要考虑当前功能是否够用,价格适中,而且要考虑产品的升级换代,所以设计的系统选
[嵌入式]
对于刚入门ARM嵌入式的一些建议
由于很多人总问这个问题,所以这里做一个总结文档供大家参考。这里必须先说明,以下的步骤都是针对Linux系统的,并不面向WinCE。也许你会注意到,现在做嵌入式的人中,做Linux研究的人远比做WinCE的人多,很多产家提供的资料也是以Linux为主。我一直很难理解,其实WinCE的界面比Linux的界面好看多了,使用起来也很方便,更为重要的是,WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学Linux或者使用Linux做嵌入式的人就是远比WinCE多。 在和很多工作的人交流时我了解到,他们公司从没考虑使用WinCE,因为成本高,都是使用Linux进行开发。我读研究生的的实验室中也没有使用WinCE的,大
[单片机]
一种优化的机顶盒电子节目指南系统设计与实现
1 引言 电子节目指南(Electronic Program Guide,EPG) 作为数字电视特有的功能,它是在符合MPEG-2 (13818-1)的TS传输流中插入DVB标准定义的业务信息(Service Information,SI),使机顶盒(Set-Top-Box)的综合接收解码器(IRD)可以从TS流中提取出节目提供商播出节目的列表和播出参数,以直观的形式显示给数字电视用户,使得用户可以方便地接收、选择数字电视节目。电子节目指南是个复杂的系统,它的实现除了取决于机顶盒的软硬件资源外,还和前端SI发表策略有关。本文从机顶盒研发的角度出发,给出一种优化的机顶盒电子节目指南实现方案。 2 系统总体结构 电子节目指南的基
[嵌入式]
嵌入式机器视觉系统的三种实现方式
现有的大多数机器人,都采用单片机作为控制单元,以8位和16位最为常见,其处理速度较低,没有操作系统,无法实现丰富的多任务功能,系统的潜力没有得到充分的发掘和应用。随着科技的发展和更多业务需求的增长,嵌入式视觉系统也迎来了更多的挑战,比如功耗、复杂的算法、处理器的性能、更高的图像分辨率等,人们需要的是更加智能化的系统,嵌入式视觉系统是实现智能化系统重要的组成部分。 作为系统的输入CMOS和CCD是目前图像采集采用的两种领先技术,CCD能够提供更高的图像质量,但是经过过去10年的发展CMOS与其的差距也越来越小了,在功耗、成本和功耗方面大有超过CCD之势。此外很多应用都需要高效的并行处理系统,因此需要采用专用的硬件处理器比如GPU
[嵌入式]
影响嵌入式处理技术未来发展的三个趋势
让嵌入式未来成为可能的技术正在变革智能家居、城市、工厂和汽车领域,优化日常电子产品,并开启创造更美好世界的新途径 嵌入式处理的未来如何? 从技术角度来看,嵌入式系统将实现更高能效,从而帮助节约能源,并实现更具环境可持续性的电子产品。它们将实现与人类更加沉浸式的交互,并融入周围环境,例如由更先进的自主机器人来执行任务并提高便利性。此类系统将能够采集、分析并响应与日俱增的数据。同样重要的是,不断发展的技术将更容易被更多人使用,从而充分享受技术进步带来的福利。 要想实现这一未来,嵌入式处理器需要不断发展:它们需要在变得更加智能的同时降低功耗。此外,还需要经济实惠、具有更多的集成元件以及直观的嵌入式软件和工具支持。 基
[嵌入式]
嵌入式系统能耗的动态管理
追溯历史,嵌入式处理器的低功耗是通过使用一些低功耗的空闲或睡眠模式来实现的。现在,嵌入式处理器要承担更复杂的工作,需要更高的性能。新的应用程序(如音频和视频播放以及游戏等)一般运行时间都相当长,“运行时间”与“空闲时间”之比也上升得很快。传统的电源管理技术在空闲时间中是非常有效的,但要在运行中节省电池能量就无能为力了。 此外,电源管理芯片制造商仅仅把注意力集中在供电的管理方面。情况一般是这样的,嵌入式处理器供应商给出输入/输出功率要求,功率半导体供应商则争相开发出尽可能高效的满足要求的 IC。然而,现在象开关稳压器这样的电源管理 IC 效率已经达到了 95% 的高峰。这迫使今天的电源 IC 供应商不仅要在价格上竞争,还要靠效率的
[单片机]
<font color='red'>嵌入式</font>系统能耗的动态管理
基于ARM高速闪存MCU应对广泛嵌入式需求
  由于采用了ARM7TDMI-S内核,LPC2000系列MCU工作频率达60MHz,与其他8-bit产品相比具有更强的功能延展性。同时它借助片上存储器加 模块实现了“零等待访问”高速闪存功能,提高了指令执行的效率。   此外,LPC2000的外设接口非常丰富,包括UART、SPI、I2C、CAN、ADC、 PWM、RTC等。LPC2000系列MCU应用领域非常广泛,从网络通信、 马达控制,到汽车和消费电子都适合于涉足。   嵌入式系统是面向用户、面向产品、面向应用的,它是将先进计算机技术、半导体技术和电子技术以及各行业的具体应用相结合的产物,因此它是一个高度密集、不断创新的知识集成系统。作为嵌入式系统,它必须能够根据应用的需
[嵌入式]
TQ2440 学习笔记—— 9、嵌入式编程基础知识【arm-linux-gcc 选项】
自己刚开始看的时候,总是沉不下心,后面硬是硬着头皮看完!现在再重新看一遍,做下记录!方便以后阅读,因为有些东西挺容易忘的。 一、交叉编译工具选项说明 1、arm-linux-gcc 选项 一个C/C++ 文件要经过预处理、编译、汇编、和链接 等4个步骤才能变成可执行文件;在Windows 下我们只需要单机几个按钮即可编译,但在ARM平台上,我们必须使用交叉编译工具。 预处理:——得到 ” .i “文件。 使用的工具 arm-linux-cpp 编译:——将上述的” .i “文件“翻译”成汇编代码。 使用的工具为ccl(它的名字就是ccl,不是arm-linux-ccl) 汇编:——将上一步的代码翻译成符合一
[单片机]
TQ2440 学习笔记—— 9、<font color='red'>嵌入式</font>编程基础知识【arm-linux-gcc 选项】
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved