zoukankan      html  css  js  c++  java
  • gnu-ucos 增加 bmp 位图显示

       昨天又下了点功夫弄了个在tft屏幕上显示bmp位图的。

    我选择的是24位tft真彩測显示方式所以也要选择真彩色位图。网上给出的16位位图数组无法使用。在csdn上下载了2个制作工具,一个是c代码的,一个是exe二进制文件感觉都不好用。

    无奈改动了那个c代码的自己弄了个制作 数组的小工具。

    能够从github上clone下来(由于位图是微软的格式,所以这里就用了win以下的结构体来处理了):

    git@github.com:xushichao/bmptool.git

    然后 就是得到320*240的bmp文件,这个能够用qq截图,在截的过程中会动态的给出分辨率。

    此时一个24位真彩色bmp数组得到了(我的头文件数组中是唐雨柔的头像 ),

    unsigned char bmp_data[]=
    {
    0x06, 0x38, 0x60, 0x06, 0x35, 0x5d, 0x04, 0x32, 0x59, 0x02, 0x2d, 0x54, 0x00, 0x2a, 0x51, 0x00, 
    .....
    0x13, 0x09, 0x0f, 0x15, 0x07, 0x0b, 0x16, 0x04, 0x08, 0x13, 0x05, 0x07, 0x12, 0x03, 0x06, 0x12, 
    };
    
    
    然后就是把这个数组写到 lcd 缓冲区里面:

    paint_bmp(0,0,LCD_WIDTH,LCD_HEIGHT,bmp_data);
    

    void paint_bmp(int x0,int y0,int h,int l,unsigned char bmp[])
    {
    	int x,y,k=0;
    	U32 c;
    	int p = 0;
    
    	for( y = y0 ; y < l ; y++ )
    	{
    		for( x = x0 ;  x< h ; x++ )
    		{
    			c = 0;
    			c |= bmp[p]; 
    			c |= bmp[p+1]<<8; 
    			c |= bmp[p+2]<<16; 
    			if ( ( (x0+x) < LCD_WIDTH) && ( (y0+y) <LCD_HEIGHT) )
    				LCD_BUFFER[y0+y][x0+x] =c;
    			p +=3;
    		}
    	}
    }

    在我的 tq2440开发板上显示的bmp位图恰好是原来的图片翻转过来了。推測可能是制作数组或者把数组写到lcd缓冲区 过程中哪里出现了问题。


    真实图片:



    在我的开发板上则显示为:




    详细代码可到我的github上clone。


    用到的bmp位图链接:

    https://www.dropbox.com/s/a3dtgsw8vyv4zz4/lcd320%20240.bmp





  • 相关阅读:
    Word 转换为 PDf 的技术方案
    [转载]sql server 常用存储过程
    Redmine 初体验
    Quartz.net Tutorial Lesson 1
    [转载]sql server TSQL 区分字符串大小写 的两种方法
    [原创]sql server inner join 效率测试
    java实现树的一般操作
    【转】Mybatis中进行批量更新
    【转载】单例模式的7种写法(整合自两篇文章)
    mybtis批量insert传入参数为list
  • 原文地址:https://www.cnblogs.com/liguangsunls/p/6839402.html
Copyright © 2011-2022 走看看