我将SD卡上的bmp格式图片保存到外部FLASH上,下面这段程序火哥帮忙看看有什么问题,我红色标出的地方读出的数据开头两字节也不是0x4d42啊,高手们帮我看看我要怎么改才能正确的把数据存到外部FLASH 中,后面再从flash中读出数据在LCD上显示这个bmp图片
int Save_Picture_To_Flash(u32 WriteAddr, uint8_t * pic_name)
{
int i, j, k;
int width, height, l_width;
BYTE red,green,blue;
BITMAPFILEHEADER bitHead;
BITMAPINFOHEADER bitInfoHead;
WORD fileType;
unsigned int read_num;
unsigned char tmp_name[20];
sprintf((char*)tmp_name,"0:%s",pic_name);
//擦除FLASH 24k大小,从4096*64
for(i=0;i<6;i++){
SPI_FLASH_SectorErase(WriteAddr+4096*i);
}
printf(&quot;\r\n FLASH擦除成功! \r\n&quot;);
/************************************************************************/
f_mount(0, &bmpfs[0]);
bmpres = f_open( &bmpfsrc , (char *)tmp_name, FA_OPEN_EXISTING | FA_READ);
if(bmpres == FR_OK)
{
// 读头文件信息 2字节
f_read(&bmpfsrc,&fileType,sizeof(WORD),&read_num);
// 判断是不是BMP文件
if(fileType != 0x4d42)
{
BMP_DEBUG_PRINTF(&quot;file is not .bmp file!\r\n&quot;);
return 1;
}
else
{
BMP_DEBUG_PRINTF(&quot;Ok this is .bmp file\r\n&quot;);
}
// 读bmp头文件信息
f_read(&bmpfsrc,&bitHead,sizeof(tagBITMAPFILEHEADER),&read_num);
showBmpHead(&bitHead);
// 读位图头文件信息
f_read(&bmpfsrc,&bitInfoHead,sizeof(BITMAPINFOHEADER),&read_num);
showBmpInforHead(&bitInfoHead);
}
else
{
BMP_DEBUG_PRINTF(&quot;file open fail!\r\n&quot;);
return 1;
}
/******************************************************************************/
width = bitInfoHead.biWidth;
height = bitInfoHead.biHeight;
// 计算位图的实际宽度
l_width = WIDTHBYTES(width* bitInfoHead.biBitCount);
if(l_width > 960)
{
BMP_DEBUG_PRINTF(&quot;\n SORRY, PIC IS TOO BIG (<=320)\n&quot;);
return 1;
}
/******************************************************************************/
if( bitInfoHead.biBitCount >= 24 )
{
for ( i = 0; i < height; i ++ )
{
f_lseek ( & bmpfsrc, bitHead .bfOffBits + ( height - i - 1 ) * l_width );
// 读取一行bmp数据到数组pColorData
bmpres=f_read ( & bmpfsrc, pColorData, l_width, & read_num );
printf(&quot;\r\n bmpres=%d \r\n&quot;,bmpres);
if(bmpres==FR_OK){ //将读出的数据写FLASH中,写入地址4096*64
SPI_FLASH_BufferWrite(pColorData, WriteAddr+i*l_width, l_width);
}else{
return 1;
}
}
return 0;
}
else
{
BMP_DEBUG_PRINTF(&quot;SORRY, THIS PIC IS NOT A 24BITS REAL COLOR&quot;);
return 1;
}
/***************************************************************************************/
f_close(&bmpfsrc);
} |