打印
[STM32F4]

读取sd卡.bmp文件在Lcd屏上,显示颜色不对

[复制链接]
2733|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hpdell|  楼主 | 2014-9-21 09:55 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

本帖最后由 hpdell 于 2014-9-21 09:46 编辑


请问下,stm32f4xx的单片机,读取sd卡里面的.bmp文件显示在Lcd屏上,显示的颜色总是不对?

lcd屏使用的控制器是ili9846

图片数据是 24位的 ,分辨率是:480x320
分辨率是480x320

显示4、8、16位的 图片颜色是对的,唯独这个24位的就不对了????????????


原始图片.bmp(24位的):
  






单片机读取sd卡里面的.bmp(24位的)文件显示后的图片:
图片上面还有些绿色的条纹,不知道是什么情况 ?
   






下面是部分的相关代码:
        unsigned char buffer[480 * 4];

#define MAX_X  480
#define MAX_Y 320
#define BMP_GET_RGB_565_CONVERT(red, green, blue) (u16)(((red >> 3) << 11) | ((green >> 2) << 5) | (blue >> 3))
                                case 24:                                                                                //24位图  16M真彩色
                                       
                                        if(bh.width > MAX_X)    //图片宽度不能超过480
                                        {
                                                LCD_Clear(BLUE);
                                                LCD_GUI_Print(16, 60, ".bmp文件的宽度超过显示范围,程序退出...",WHITE, BLUE, FontLarge);                                
                                                return ERROR;
                                        }
                                        if(bh.height > MAX_Y)   //图片宽度不能超过320
                                        {
                                                LCD_Clear(BLUE);
                                                LCD_GUI_Print(16, 60, ".bmp文件的高度超过显示范围,程序退出...",WHITE, GREEN, FontLarge);                                
                                                return ERROR;
                                        }        
                                       
                                        LCD_SetCursor( x, x+bh.width-1, y, y+bh.height-1);               

                                        line_byte = ((24 * bh.width + 31) >> 5) << 2 ;                                //求每一行的字节数
                                       
                                        f_lseek(&fsrc, bh.offset);

                                        for (i = 0; i < bh.height; i++)
                                        {
                                                f_read(&fsrc, (u8 *)&buffer[0], line_byte, &counter);

                                                for (j = 0; j < bh.width; j++)
                                                {
                                                        
                                                        LCD_RAM = BMP_GET_RGB_565_CONVERT(buffer[(j * 3) + 2], buffer[(j * 3) + 1], buffer[j * 3]);
                                                }
                                        }

                                        break;
沙发
icecut| | 2014-9-21 10:45 | 只看该作者
根据颜色反推时序

使用特权

评论回复
板凳
hpdell|  楼主 | 2014-9-21 11:07 | 只看该作者
icecut 发表于 2014-9-21 10:45
根据颜色反推时序

按照相关的介绍,bmp是按照rgb-888来存储的,但是我按照rgb-888的顺序来获得 rgb-565的格式数据就是不对 ?????

请教版主.bmp存储24位的位图数据是按照什么顺序结构来的啊 ?? 是不是我的理解有错误 ?

烦请版主指点指点几下?

使用特权

评论回复
地板
mmuuss586| | 2014-9-21 11:27 | 只看该作者
hpdell 发表于 2014-9-21 11:07
按照相关的介绍,bmp是按照rgb-888来存储的,但是我按照rgb-888的顺序来获得 rgb-565的格式数据就是不对  ...

你的思路是对的;
你网上参考一些做开发板的厂家例程看看;

使用特权

评论回复
5
KENJI_ZEBRA| | 2014-9-21 20:48 | 只看该作者
相片反轉了

使用特权

评论回复
6
hpdell|  楼主 | 2014-9-22 14:11 | 只看该作者
相片反了,有什么好的方法解决啊 ?

使用特权

评论回复
7
hpdell|  楼主 | 2015-11-8 16:26 | 只看该作者
终于搞定了,他奶奶 的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

29

帖子

0

粉丝