初级会员

- 积分
- 55
- 金钱
- 55
- 注册时间
- 2016-4-23
- 在线时间
- 15 小时
|

楼主 |
发表于 2016-5-21 13:46:27
|
显示全部楼层
[mw_shl_code=c,true]bmpinfo BmpInfoX;
uint8_t bmpDecode(uint8_t *picname)
{
FIL *bmpFile;
FRESULT status;
//BMPINFOX *pbmptemp;
BMPINFOHEADERX bmpinfoheadx;
BMPFILEHEADERX bmpfileheadx;
uint8_t cnt;
uint8_t bitcount;
uint8_t bittype;
uint8_t *databuff;
uint8_t bmpbuff[3];
uint16_t i,j,k;
printf("\r\n ×¼±¸½âÂëBMPͼƬ");
databuff = (uint8_t *)Malloc(LCD_WIDTH*3);
if(!databuff) return PIC_MEM_ERR;
bmpFile=(FIL *)Malloc(sizeof(FIL));
if(!bmpFile)
{
MemoryFree(databuff);
return PIC_MEM_ERR;
}
printf("\r\n ÄÚ´æ·ÖÅä³É¹¦");
status = f_open(bmpFile,(const TCHAR *)picname,FA_READ|FA_OPEN_EXISTING);
if(status==FR_OK)
{
status = f_read(bmpFile,&bmpfileheadx,sizeof(BMPFILEHEADERX),(UINT *)&cnt);
if(status!=FR_OK) return PIC_READ_ERR;
status = f_read(bmpFile,&bmpinfoheadx,sizeof(BMPINFOHEADERX),(UINT *)&cnt);
if(status!=FR_OK) return PIC_READ_ERR;
bitcount =bmpfileheadx.bfOffBits;
bittype = bmpinfoheadx.biBitCount/8;
BmpInfoX.bmpWidth = bmpinfoheadx.biWidth;
BmpInfoX.bmpHeight = bmpinfoheadx.biHeight;
printf("\r\nÆ«ÒÆÁ¿=%d",bitcount);
printf("\r\nͼÏñÀàÐÍ=%d",bittype);
printf("\r\nͼÏñ¸ß¶È=%d",BmpInfoX.bmpHeight);
printf("\r\nͼÏñ¿í¶È=%d",BmpInfoX.bmpWidth);
if((BmpInfoX.bmpWidth*bittype)%4) BmpInfoX.index = ((BmpInfoX.bmpWidth*bittype)/4+1)*4;
else BmpInfoX.index = BmpInfoX.bmpWidth*bittype;
printf("\r\nͼÏñʵ¼Ê¿í¶È=%d",BmpInfoX.index);
if(bittype >= 3)
{
printf("\r\nͼÏñÊÇ24λÕæ²Êͼ");
for(i=0;i<LCD_HEIGHT; i++)
{
if(LCD_WIDTH>BmpInfoX.bmpWidth)
{
printf("\r\nÆÁÄ»¿í¶È´óÓÚͼƬ¿í¶È");
f_read(bmpFile,databuff,BmpInfoX.index,(UINT *)&cnt);
for(j=cnt;j<LCD_WIDTH*3;j++)
{
databuff[j]=0x00;
}
}
else
{
f_read(bmpFile,databuff,LCD_WIDTH*3,(UINT *)&cnt);
if(LCD_WIDTH*3!=BmpInfoX.index)
{
printf("\r\nÆÁÄ»¿í¶ÈСÓÚͼƬ¿í¶È");
f_lseek(bmpFile,bitcount+(i+1)*BmpInfoX.index);
}
}
for(k=0;k<LCD_WIDTH;k++)
{
// printf("databuff[k]=0x%02x",databuff[j]);
bmpbuff[2]=databuff[k*3]; //B
bmpbuff[1]=databuff[k*3+1]; //G
bmpbuff[0]=databuff[k*3+2]; //R
LCDFastDrawPoint(k,i,bmpbuff);
//printf(" k=%d",k);
}
//printf("\r\ni=%d",i);
}
f_close(bmpFile);
}
}
else
return PIC_OPEN_ERR;
MemoryFree((uint32_t *)databuff);
MemoryFree(bmpFile);
return 0;
}
void LCDFastDrawPoint(uint16_t x,uint16_t y,uint8_t *data)
{
SetWindow(x,y,1,1);
Zebra_SPI_RegWR(0x2C);
SPI_Prepare();
Zebra_SPI_RGBWR(data[0]);
Zebra_SPI_RGBWR(data[1]);
Zebra_SPI_RGBWR(data[2]);
// SetWindow(0,0,320,240);
}
[/mw_shl_code] |
|