单色BMP位图的显示方法

描述

在工控领域的实际应用中,客户经常需要使用LCD显示屏进行一些简单的文字和图形显示操作,如显示公司的LOGO和开机画面、显示一些重要的参数指标等。英利嵌入式Linux工控主板可以直接支持6种单色点阵LCD显示屏,分别是KS0108控制器的128x64点阵LCD、T6963C控制器的240x128点阵LCD、SED1335控制器的320x240点阵LCD、KS0108控制器的192x64点阵LCD、UC1698U控制器的160x160点阵LCD、YXD控制器的128x64点阵LCD。

对于文字的显示,英利公司已有例程进行介绍,本文将详细介绍单色BMP位图的显示方法。

1、制作符合显示需要的单色BMP位图

        使用图形编辑软件制作用来显示的图片,并保存为位图格式,然后使用Windows中的“画图”工具打开该图片,另存为单色位图(注:一定要存为单色位图,否则无法显示)。注意图形的尺寸大小,如果待显示图形大于LCD的尺寸,则无法正确显示。

2、使用英利提供的示例程序进行图形显示

        英利提供了一个名为“test_bmp”的测试例程,其中包括了测试程序“test_bmp”以及用于图形显示的API函数。其中,API函数DisplayBmp( . . )中实现了对BMP文件的读取、解析和显示操作,客户将制作好的图片和测试程序test_bmp一同放在英利工控主板的/mnt/nandflash目录中,通过命令行输入如下命令:

[root@EM9X60 /mnt/nandflash]# ./test_bmp logo.bmp 3 30 10

即可以在LCD显示屏上看到显示效果。

该命令的4个参数说明如下:
        logo.bmp:英利测试时使用的图片。客户实际使用的时候填写自己的图片名字
        3:英利测试使用的是320x240点阵的显示屏,定义为3号屏,因此此处的参数为3。如果使用其他分辨率的LCD,则填写相应的
              参数,参数与LCD对应关系如下:
              1:KS0108控制器的128x64点阵LCD
              2:T6963C控制器的240x128点阵LCD
              3:SEED1335控制器的320x240点阵LCD
              4:KS0108控制器的192x64点阵LCD
              5:UC1698U控制器的160x160点阵LCD
              6:YXD控制器的128x64点阵LCD
        30:显示屏x方向的起始显示位置。如果不填,默认为0
        10:显示屏y方向的起始显示位置。如果不填,默认为0

需注意的是:
        1、用于显示的图片必须是单色位图,且图片的长宽尺寸必须小于LCD相应方向(x和y轴)的点阵数,否则无法显示。
        2、前两个参数(图片名、显示屏分辨率)必须设置,否则系统报错退出。
        3、显示屏参数中,只有数字1-6有效,其余输入均视为无效参数,系统报错退出。
        4、后两个参数是用于控制图片显示位置的,如果都不设置,则默认从左上角第一个点开始显示。这两个参数必须同时设置或者
              留空,不能只设置一个。同时,如果设置的起始位置造成了图片的溢出(即如果从起始位置开始显示,图片在x或者y轴方向的
              尺寸已经大于了该方向剩余的LCD点阵数),也无法正确显示。

3、图形显示示例程序说明

        能够使用示例程序进行单色位图显示以后,客户可以以测试程序为蓝本,针对自己的应用设计自己的图形显示程序。test_bmp的代码和说明如下:

#include 
        #include
        #include
        #include 'lcd_api.h'
        #include 'bmpdisplay.h'
        int main( int argc, char** argv )
        {
                // 如果只设置了图片名和显示屏尺寸,则默认从左上角第一个点开始显示
                if( argc == 3 )
                {
                        InitLcd( atoi(argv[2]) );
                        DisplayBmp( argv[1], 0, 0 );
                }
                // 如果设置了4个参数,则完全按照参数设置进行配置
                else if( argc == 5 )
                {
                        InitLcd( atoi(argv[2]) );
                        DisplayBmp( argv[1], atoi(argv[3]), atoi(argv[4]) );
                }
                else
                {
                        printf( 'Parameter fail!\n' );
                        return -1;
                }
                sleep( 1 );
                LCD_DeInit( );
                return 0;
        }

该例程很简单,解析命令行传入的参数以后调用英利提供的函数DisplayBmp即可以进行显示。实际应用中,客户用于显示的图片有可能只是一个,显示屏也会固定一种型号,并不需要从命令行传入参数进行解析,此时可以简化上述程序,整个过程只需要如下四条语句:

InitLcd( 3 );
        DisplayBmp( 'logo.bmp', 0, 0 );
        sleep( 1 );
        LCD_DeInit( );

对该示例程序感兴趣的英利公司客户可以来电或通过电子邮件索取相关代码。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分