前言:寻找写作灵感?中文期刊网用心挑选的电视显屏的风格与特点,希望能为您的阅读和创作带来灵感,欢迎大家阅读并分享。
我们可以通过遥控器或面板按键操作来选择电视接收机所提供的功能,由于人机交互的迫切需求,友好的GUI图像用户界面被研发出来。在对电视机进行操控的时候,我们提出以下一些问题,希望通过对这些问题的逐一解释,逐步理解电视OSD显示的机理。 字符或符号是怎么显示到屏幕上的? 屏幕菜单界面是怎样进行控制的? 字符大小、颜色是怎样选择和控制的? 多语言是怎样进行控制和显示的? 一些特定的应用和界面是怎样进行控制的? 一、OSD电路与字符存储 东芝TMPA8821系列电视芯片内置了OSD屏显电路,当需要显示字符符号时,OSD显示控制启动,来自字符符号ROM区(ROM.Fable)的OSD字符被加载到显示输出控制缓存,由TV信号处理器控制显示。字符是点阵式,采用模拟叠加技术,把OSD信号叠加在R、G、B三枪上,送到屏上显示。这不同于数字电视的数字叠加技术,在数字电视中,OSD字符或位图一般在SCALER(图像比例变换)处理阶段通过修改DISPLAYRAM(显示动态内存)来加载,最后通过显示电路显示在屏上,例如P七七1硒、止s公司的PWll3芯片。 在东芝TMpA8821系列芯片中,显示字符共有大、中、小三种可选,在最小字体显示下,满屏可以显示12行,每行最多可以显示32个字符,故此系列芯片最多的ROM字符表为384(=32x12)个。 东芝该系列电视芯片的开发语言为C一IJ跳,这是一个介于C语言与汇编语言的开发语言,同时兼有了C高级语言的易于实现、汇编语言的对硬件方便控制等各自的不同优势。 我们知道,在ANSIC(美国国家标准化组织标准C语言)中一个字节可以用来表示一个字符,通常给一个字符变量赋值可以直接指定该字符,或指定其对应的ASCn数值(不同的计数制式都可以)。如:Chareh;ch==‘0’ch=Ox30/*直接指定该字符*//*指定其对应的ASCll(地址)数值*/因此,为了便于在C一LI跳中方便使用每一个常用字符,所有的常用字符都定义同ANSIC一样的映射。假定我们定义的字符映射表不是这样,如:“0”字符不是在0x31而是ox41,那我们在C一IJKE中对该字符的赋值就只能够使用“指定其地址对应的数值”了,相应的其他字符与数值的转换也会带来一系列的问题。 同样,如下图3所示,我们知道,一个字符的最大可表示范围为0龙55(O习xFr),而ROM字符空间为384个,那如何表示超过0xFF的字符呢?使用转义字符可以解决此问题。转义字符、逃逸字符(EscapeChar)在通信中经常被使用,用以表示在其后紧跟的字符被转义,这里的使用方法其实是扩展了它的使用功能,即:扩展了字符的显示范围,被转义的字符为0xFT后的字符,本质上一个转义字符最多也可以扩展(0xFT+l)个字符。至此,字符的存储问题得到了解决。 在数字LCD电视的屏显技术中,采用了兼容WINDOWS字体的设计方法,即,一种新的字体,只要在wiNDOWS系统平台中有,就可以把该字体“引进”到系统中,作为显示设计的一种字体,在给定不同的显示字符后,选择对应的需要采用的字体即可,具体的转换细节由底层的SDK(阮众wareDevefopment幻t,软件开发工具包)实现。 二、OSD菜单界面控制 前面提到,东芝TMpA8821系列芯片中,在最小字符格式下,满屏可以显示12行,每行可以显示32个字符,因为在此系列芯片中不支持位图格式的OSD显示,所以在oSD中显示的所有图标,都是点阵式的字符。由于某些图标的复杂性或特殊需要,一个完整意义上的图标可能会占用多个OSD字符存储空间。 OSD菜单界面设计,主要涉及到OSD的排版和风格,类似一些可视化语言应用开发的界面设计:首先,通过拖动各类控件实现整个界面;然后,通过各个控件对应的事件实现基本模块功能;最后,通过消息传递机制整合整个的项目。对应这个过程,下面我们来简单分析东芝模拟电视芯片所采用的OsD菜单显示。 控件界面设计:这里,控件即字符。考虑到视觉可视性和操作习惯,菜单界面一般设计为多层次,首层一般为主菜单,其次为二级、三级子菜单等,主菜单一般作为功能分类导航。按照不同的设计风格,主菜单一般可设计为横式或竖式,子菜单出现后一般保留主菜单的显示,或保留显示当前主菜单的选择。 在数字LCD电视的屏显技术中,位图与字符已经分开,在实际显示的时候需要进行不同的处理。显示的位图需要在设计阶段给定,并且给定位图的位深需要根据不同的开发平台来定义,在显示时,对应需要显示的位图被加载到FrameBuffer中,然后根据坐标转换,通过显示电路显示到屏上。 Pixe1Works的PWll3SDK中,在OSD的设计上与模拟电视的不同点在于其OSD是单独设计的,设计过程非常类似wiNDOWS犯程序的开发。在模拟电视中,我们需要显示一个图标或一个字符,过程往往是:规划要显示的位置与要显示的字符内容,通过代码控制显示特定行,加载特定的字符,然后通过一个特定的系统显示函数,把欲显示的内容显示到屏上。但在Pixe1Works的PWI13SDK中,通过特定的GUIBuilder工具,你可以构建一个需要显示的界面,该工具的输人来自该SDK的PWCo浦g的一个特定输出,在GUIBuilder中你可以自定义一些需要显示的条件,使得需要显示的内容只在特定的条件触发后显示。基于这种独立模块的开发的确带来了开发高效,但同时,一个不容忽视的事实凸现出来:终端开发人员对系统的可控性变得越来越低,如果需要改动一个特定的内容往往需要改动系统的结构,因此,Rxe1W0rks的针对数字电视开发的下一代SDK又回到了从前,依然采用代码交互式的开发方法,让终端开发人员有了更多的可控之处。 三、多语言的显示与控制 不同的语言,本质对应的是不同的OSD字符显示,在OSDROM表可以允许的条件下,在OTP或掩膜片大小允许的情况下,我们可以多增加一些语言。#p#分页标题#e# 首先,在东芝TMPA8821系列芯片中让我们了解一下字符的定义:/*SOUND*/constcharosdesstr--bass〔]={”BAss,,,0x65,0x()e,0#ifdefLANG_IND0N’ESIA/*假定该宏被定义*/,’B’,’A’,’S’,’S’,0#endif};对常量osd_str_bass字符定义了两种语言,”BASS”、O汤5,oxoc,0和’B’,’A’,’S’,’S’,0,我们注意到在C语言中,字符串是以0笼加表示结束的(不是字符“O,’),在该例中,”BASS”隐式包含了0,00,后面两个字符串显式表示了ox(X),在给定一种语言的条件下,如第二种语言,在程序运行态中,通过具体的0喊X)的计数(第二个),即可定位具体的字符串,显示正确的字符。 考虑到不同的语言习惯,不同的语言需要安排合适的字符显示次序。如,中、英等语言字符显示由左到右,但阿拉伯语、波斯语等语言是由右到左,因此,在界面字符定义的时候需要考虑到由右到左的那些字符,在界面排版的时候需要按照不同语言的习惯加以控制。 前面提及,在PixelWOrk,的PWI13SDK中,多语言的实现依赖于当前开发平台是否有需要显示的语言,同时还依赖于OSD的可用空间大小。我们知道,在一特定平台下,提供给显存的空间是有限的,如果界面布局过于凌乱或超过了显存的边界大小,则会出现OSD显示不正常的现象。 四、特定显示界面的控制 在不同的产品中,可能会包含不同的特定功能需求,如开关机拉幕、游戏、屏保、OSDLoGO、动画菜单等,这些特定的应用是如何控制的呢?关键在于算法。 开关机拉幕,通过对AREA的控制,我们可以显示拉幕的效果。我们注意到,在双拉幕的过程中,我们需要确定如下的关键点:拉幕的中心位置、拉幕的步幅、拉幕步幅的时间等,通过细致分析,利用两个AREA,双拉幕的效果很容易实现。当然,进一步分析我们还可以得到更多其他效果的拉幕,如单拉幕、卷边拉幕、放射状拉幕等。 在屏保中,我们的屏保字符图标在全屏上下左右移动,实现了动画的功能,如何实现呢?前面我们提到,osD字符的显示具体位置受到一些位置寄存器的控制,利用这些oSD显示位置寄存器,我们便可实现动画的功能。 动画菜单,关键在于何时动?具有何效果?通过中断定时器,我们可以定时驱动菜单显示的动画,通过不同的排版或OSD字符的显示次序/位置,我们可以实现具体的动画效果,当然,在16位或更高的开发平台上,我们能够实现的一些特效功能几乎可以是矶NDOWS平台的一个字集,为界面友好性及功能的提升创造了良好的条件。 五、结束语 通过以上的一些简单示例,对电视的OSD显示已经有了一些基本的概念和认识。当然,在一些其他厂家的模拟TVOSD显示控制中,已经采取了一些更为先进的处理方式,如:直接使用BITMAP位图,彩色OSD字符、所见即所得OSD排版等,都极大地缩短了OSD界面的开发时间,提高了工作效率,但无论如何,一般情况下,厂家都会提供其对应的一些OSD字符工具、位图工具等,以创造出更为绚丽的人机界面,满足消费者日益提高的需求。