新手上路
- 积分
- 44
- 金钱
- 44
- 注册时间
- 2014-7-8
- 在线时间
- 1 小时
|
5金钱
本人就先解码比较简单的,小于3.2寸的,24位图片。但发现有的图片可以解码出,有的不行,考虑的对齐问题,关键是宽度像素点不是4的倍数有的能解码出。
希望大神帮个忙,已经搞了好半天呢。。
FATFS fs2;
FIL fsrc2;
UINT br2;
BMP_HEAD_FILE bmphead;
BMP_HEAD_IMF bmpinf;
void BMP_Init(void)
{
u32 bmp_height,bmp_width;
u16 rollen,rest,rolcont;
u8 table[1024];
u16 color1,color2,color3,color4;
u16 i,j,z,k;
u16 x,y;
u32 lseek;
z=0;
f_mount(0, &fs2);
f_open(&fsrc2, "/BMP/pp4.bmp", FA_OPEN_EXISTING | FA_READ);
f_read(&fsrc2, &bmphead, 14, &br2);
f_read(&fsrc2, &bmpinf, 40, &br2);
f_close(&fsrc2);
bmp_height=(u32)bmpinf.biHeight;
bmp_width=(u32)bmpinf.biWidth;
y=320-((320-bmp_height)/2);
printf("height= %d\n",bmpinf.biHeight);
printf("width= %d\n",bmpinf.biWidth);
x=(240-bmp_width)/2;
switch(bmpinf.biBitCount)
{
case 24:
if(bmp_width%4)
{
rollen=(bmp_width/4+1)*12;
}
else
{
rollen=bmp_width*3;
}
rolcont=1024/rollen;
rest=rollen-bmp_width*3;
lseek=bmphead.bfOffBits;
lseek=(bmphead.bfOffBits>>16)+(lseek<<16);
f_open(&fsrc2, "/BMP/pp4.bmp", FA_OPEN_EXISTING | FA_READ);
f_lseek(&fsrc2,bmphead.bfOffBits);
for(j=0;j<bmpinf.biHeight;)
{
f_read(&fsrc2, table, rolcont*rollen, &br2);
z=0;
for(k=0;k<rolcont;k++)
{
for(i=0;i<bmp_width;i++)
{
color1=table[z]>>3; // B
color2=table[z+1]>>2; // G
color3=table[z+2]>>3; // R
color4=(((u16)color3)<<11)+(((u16)color2)<<5)+(u16)color1;
LCD_DrawPoint_Color(x+i,y,color4);
z=z+3;
}
z=z+rest;
y--;
j++;
}
}
f_close(&fsrc2);
break;
}
}
|
|