基于BMP的图像点阵获取原理及其应用
扫描二维码
随时随地手机看文章
1 引 言
点阵式液晶显示器(Liquid Crystal Display,LCD)以优越的性价比早已成为电子设计者的常用器件,被广泛应用于各种工业电子设备中。起初,点阵式液晶只是用来消除段码式液晶显示过于粗糙、容易混淆等的缺点,实现标准ASCII字符的显示。为了摆脱英文显示的限制,人们通过查询内码从标准字库中得到所需汉字的点阵值,进而实现汉化菜单,使设备的使用更加直观、方便。于是,汉化显示也成为许多国产设备在与进口设备竞争中的主要优势之一。后来,人们又通过手工的方法,实现了某些简单图像的显示,使显示界面有了一定程度的提高。然而,如何通过简单的途径在没有图形驱动模块的点阵式液晶显示器中显示各种静态图像以及动画,成为长期困扰设计者的问题。我们现在可以通过扫描仪、互联网、高级图形处理软件很方便地获得各种各样的图像,但是这些文件最终都以各种特定的格式储存在计算机中,怎样通过比较简单的手段把它移植到液晶显示器中,就是本文阐述的主要内容。文章通过分析传统图像点阵获取原理以及BMP图像的存储格式,找到了它们间的内在联系,从而实现了图像点阵的快速获取,并以T6963C〔3〕控制器为例进一步探讨了在点阵式液晶中的静态图像以及动画的显示步骤。
2 传统的点阵获取法
在点阵式液晶中显示图像,首先要获得图像的点阵值。最传统、最简单直接的点阵获取方法就是坐标扫描法。其基本步骤为:将图像置于坐标系中,根据坐标格上象素的存在与否决定该点值为1还是0;然后将每八个象素值拼成一个字节,从而得到该图像的点阵数据。图1为一个灯泡图像扫描成16×16点阵的示意。
可以看出,坐标扫描方法不需要太多技巧,直观明了。然而对于高象素图像(即点阵数量比较多的图像),坐标扫描法就显得非常繁琐。试想,要获得象素高达240×128的图像点阵值,需要手工清点30,720个点阵,然后再组成3,840个字节的点阵表供程序读取,其工作量之大可想而知。另外,当需要显示的画面比较多时工作量也成比例增加。
3 BMP位图格式分析〔4〕
BMP位图是微软公司(Microsoft)和国际商用机器公司(IBM)共同倡导的一种图像格式。它按点阵排列顺序,将每个象素的色彩值以规定的方式把整个图像记录下来。BMP格式还可细分为两种类型,即Microsoft Windows型和IBM OS/2型,两者的差别主要在于说明部分(文件头)。由于IBM OS/2类型的BMP用得比较少,所以在绝大多数情况下,BMP默认为Microsoft Windows类型。根据色彩位深度不同,Windows BMP文件象素描述部分差别较大,如256色每个象素需要8位(即1个字节)来描述,而16色的图像每个象素描述者只需4位(即半个字节)。对于绝大部分电子设计者来说,黑白二色的点阵式液晶显示器价格适中、接口简单,因而最为常用。因此,这里仅分析Microsoft Windows类型1位(Bit)描述的二色BMP图像文件。详见表1。
4 图像点阵的获取
从上述对二色BMP文件的分析,我们发现BMP文件的象素描述段中点阵的存放格式跟液晶图像显示所需的格式很类似。因此,我们不难想到液晶显示所需的图像点阵借助于计算机高级软件从BMP文件中读取。
4.1 目标图像的编辑与处理
目标图像通常并不是BMP格式,原始尺寸跟液晶显示中所需的也相差很多。因此,在从图像文件中读取点阵前必须对目标图像进行适当的编辑与处理。其步骤如下:
(1)通过图像处理软件编辑或调整目标图像尺寸,使得图像跟液晶显示的尺寸要求一致。常用的有Photoshop、Capture Professional等软件。
(2)将图像转换为二色Windows格式的BMP文件。注意,如果是彩色图像,则在转换为黑白图像时需要调节黑白对比效果,以适合黑白显示。本步骤笔者使用的是Capture Professional3.0版本Operations菜单下的Convert to->Black and White,转换时会弹出消息框,调整其Threshold的值可以预览到其黑白对比效果。
(3)将图像上下翻转(以水平线为轴)。从上面的分析可知,BMP文件中图像象素的内容是由下而上、由左及右存储的。所以按照习惯的由上而下、由左及右的顺序往液晶的显示RAM写图像点阵,必须将上述处理后的图像进行翻转,并存储为最终的图像文件。本步骤用Photoshop和Capture Professional都比较方便。
4.2 BMP文件中读取点阵的程序设计
在完成对目标图像编辑与处理后,就可以从最终得到的黑白二色Windows BMP文件中读出图像点阵了。假设点阵值按照传统的X86汇编语言格式存放在名为fig n.inc的文件中。设计点阵读取程序框图如图2所示。
设图像水平方向及垂直方向尺寸(点阵数)分别为ohr__size、ver__size,则图2的框图中:
(1)所要扫描的总行数为ver__size。
(2)判断每行是否结束的方法为:当hor__size被8整除时,则每行应读取的字节数 Byte num=hor size/8;
否则
Byte num=取整(hor size/8)+1。
(3)一行扫描完后,确定下一行指针位置的方法为:如每行字节数能被4整除时,则指针加1即可,否则指针应加上
(4--取余(Byte__unm/4)+1)。
5 图像在液晶中的显示
5.1 静态图像显示
经过前面的处理,生成的点阵文件fig n.inc中点阵存放顺序跟我们习惯的方向已经一致。因此,只要在初始化液晶后,按顺序从点阵文件中读取点阵值,再写往液晶相应的显示区,就能完成整幅静态图像的显示。图3是以常见的用T6963C作控制器的液晶显示模块为例来说明图像显示的静态流程。
5.2 动画显示
众所周知,动画显示的基本原理是利用人眼的视觉残留,将一序列静止的画面按一定的时间间隔连续播放。可见,只要获得各静态子画面的点阵值,就可以实现在点阵式液晶中的动画显示。图4是实现一个包括N个子画面的动画显示流程。其中时间间隔T根据实际效果设置。
6 结束语
计算机存储图像除了BMP外,还有多种其它格式。本文之所以选择用BMP,是因为它是一种没有压缩的点阵型的图像文件格式,而且几乎所有的Windows应用软件都支持这种格式,从而处理起来特别方便。在网络资源日益丰富的今天,多数情况下设计者可不必自己绘制而直接利用各种现成的图像、图标、动画,然后对之加以处理。在笔者参与的电力系统新一代数字式保护研制中,上述方法的成功运用使产品在很短的开发周期内取得了非常理想的人机界面效果。
实践证明,一个好的界面对塑造产品形象,增强产品竞争力起着不可低估的作用。本文给出的基于BMP的图像点阵获取方法,原理简单,实现方便,具有很高的实际应用价值。