|

楼主 |
发表于 2014-11-19 15:56:17
|
显示全部楼层
TO:版主
现在通过边读边显示数据成功了,但是显示的图片与我在SD卡上的图片信息不一致,烦请协助分析一下.万分感谢!
程序如下:
/*
******************************************************************
*
* _ShowBMP
*
* Shows the contents of a bitmap file
******************************************************************
*/
char _acBuffer[1024];
char *_acBuffer2 = _acBuffer;
static void _ShowBMP (const char *sFilename)
{
int uiCycTimes, uiCycTimes_Y;
int uiXOffset=0, uiYOffset=0;
int uiXSize=100, uiYSize=200;
unsigned int uiBMPWidth=0, uiBMPHeight=0, uiBMPCount=0;
//GUI_HMEM hMem;
/* 申请一块内存空间 并且将其清零 */
//hMem = GUI_ALLOC_AllocZero(100000);
/* 将申请到内存的句柄转换成指针类型 */
//_acBuffer2 = GUI_ALLOC_h2p(hMem);
/* 打开文件 */
result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
if (result != FR_OK)
{
return;
}
//result = f_read(&file, _acBuffer2, file.fsize, &bw);
result = f_read(&file, _acBuffer2, 0x36, &bw);
if (result != FR_OK)
{
return;
}
if (_acBuffer2[0]==0x42 && _acBuffer2[1]==0x4D) //文件格式标记为BM
{
// 图片宽度信息
uiBMPWidth = _acBuffer2[18]+(_acBuffer2[19]<<8)+(_acBuffer2[20]<<16)+(_acBuffer2[21]<<24);
// 图片高度信息
uiBMPHeight = _acBuffer2[22]+(_acBuffer2[23]<<8)+(_acBuffer2[24]<<16)+(_acBuffer2[25]<<24);
// 象素所需的位数
uiBMPCount = _acBuffer2[28]+(_acBuffer2[29]<<8);
if (uiBMPCount == 24) // 4(16色),8(256色)16(高彩色)或24(真彩色)
{
while(1)
{
//result = f_read(&file, _acBuffer2, 3, &bw); // 读取3个数据
//if (result||bw == 0)
// break;
uiXOffset = 0;
uiYOffset = 0;
for (uiCycTimes_Y=0; uiCycTimes_Y<uiBMPHeight; uiCycTimes_Y++)
{
for (uiCycTimes=0; uiCycTimes<uiBMPWidth; uiCycTimes++)
{
result = f_read(&file, _acBuffer2, 3, &bw); // 读取3个数据
if (result||bw == 0)
break;
/* 画点函数 */
RA8875_PutPixel(uiXSize+uiXOffset, uiYSize+uiBMPHeight-1-uiYOffset,((_acBuffer2[2]*32/256)<<11 | (_acBuffer2[1]*64/256)<<5 |(_acBuffer2[3]*32/256)));
uiXOffset++;
}
uiXOffset = 0;
uiYOffset++;
}
}
}
}
/*XSize = GUI_BMP_GetXSize(_acBuffer2);
YSize = GUI_BMP_GetXSize(_acBuffer2);
GUI_BMP_Draw(_acBuffer2,0,0);
while(1)
{
for(i = 100; i < 600; i += 10)
{
GUI_BMP_DrawScaled(_acBuffer2,
(LCD_GetXSize() - XSize*i/100)/2,
(LCD_GetYSize() - YSize*i/100)/2,
i,
100);
GUI_Delay(100);
}
GUI_Clear();
}*/
// GUI_ALLOC_Free(hMem);
// f_close(&file);
}
SD卡读到的图片如下:
实际的图片如下:
|
|