大学生
最后登录1970-1-1
在线时间 小时
注册时间2013-10-23
|
楼主 |
发表于 2014-5-2 11:09:44
|
显示全部楼层
山外メ雲ジ 发表于 2014-5-2 10:51
这例程不是我写,所以我不清楚情况。
有可能是仅支持 BMP16格式的图像,也有可能是图像分辨率超过320的问 ...
我把代码给你看看
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);
f_mount(0, &bmpfs[0]);
BMP_DEBUG_PRINTF("file mount ok \r\n");
bmpres = f_open( &bmpfsrc , (char *)tmp_name, FA_OPEN_EXISTING | FA_READ);
Set_direction(0);
if(bmpres == FR_OK)
{
BMP_DEBUG_PRINTF("Open file success\r\n");
//¶áè¡Î»í¼Îļtí·DÅÏ¢
f_read(&bmpfsrc,&fileType,sizeof(WORD),&read_num);
if(fileType != 0x4d42)
{
BMP_DEBUG_PRINTF("file is not .bmp file!\r\n");
return;
}
else
{
BMP_DEBUG_PRINTF("Ok this is .bmp file\r\n");
}
f_read(&bmpfsrc,&bitHead,sizeof(tagBITMAPFILEHEADER),&read_num);
showBmpHead(&bitHead);
BMP_DEBUG_PRINTF("\r\n");
//¶áè¡Î»í¼DÅÏ¢í·DÅÏ¢
f_read(&bmpfsrc,&bitInfoHead,sizeof(BITMAPINFOHEADER),&read_num);
showBmpInforHead(&bitInfoHead);
BMP_DEBUG_PRINTF("\r\n");
}
else
{
BMP_DEBUG_PRINTF("file open fail!\r\n");
return;
}
width = bitInfoHead.biWidth;
height = bitInfoHead.biHeight;
l_width = WIDTHBYTES(width* bitInfoHead.biBitCount); //¼ÆËãλí¼μÄêμ¼ê¿í¶è2¢è·±£ËüÎa32μı¶êy
if(l_width>960)
{
BMP_DEBUG_PRINTF("\nSORRY, PIC IS TOO BIG (<=320)\n");
return;
}
if(bitInfoHead.biBitCount>=24)
{
bmp_lcd(x,240-y-height,width, height); //LCD2ÎêyÏà1ØéèÖÃ
for(i=0;i<height+1; i++)
{
for(j=0; j<l_width; j++) //½«ò»DDêy¾Yè«2¿¶áèë
{
f_read(&bmpfsrc,pColorData+j,1,&read_num);
}
for(j=0;j<width;j++) //ò»DDóDD§DÅÏ¢
{
k = j*3; //ò»DDÖDμúK¸öÏñËØμÄÆeμã
red = pColorData[k+2];
green = pColorData[k+1];
blue = pColorData[k];
LCD_WR_Data(RGB24TORGB16(red,green,blue)); //D′èëLCD-GRAM
}
}
bmp_lcd_reset(); //lcdé¨Ãè·½Ïò¸′Ô-
}
else
{
BMP_DEBUG_PRINTF("SORRY, THIS PIC IS NOT A 24BITS REAL COLOR");
return ;
}
f_close(&bmpfsrc); |
|