本帖最后由 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; |