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

[复制链接]
 楼主| 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位的):
   480x320-2.bmp






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





下面是部分的相关代码:
        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的格式数据就是不对  ...

你的思路是对的;
你网上参考一些做开发板的厂家例程看看;
KENJI_ZEBRA 发表于 2014-9-21 20:48 | 显示全部楼层
相片反轉了
 楼主| hpdell 发表于 2014-9-22 14:11 | 显示全部楼层
相片反了,有什么好的方法解决啊 ?
 楼主| hpdell 发表于 2015-11-8 16:26 | 显示全部楼层
终于搞定了,他奶奶 的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

29

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部