|
FRESULT result;
UINT bw;
/* 实际的测试需要是图像宽度的4倍即可,切记(也就是保证每个像素如果是32位数据的情况) */
static char _acBuffer[480*4];
static int _GetData(void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off)
{
U32 i;
static int FileAddress = 0;
UINT NumBytesRead = 0;
FIL *PicFile;
PicFile = (FIL *)p;
/* * 检测缓存大小 */
if (NumBytesReq > sizeof(_acBuffer)) {
NumBytesReq = sizeof(_acBuffer);
}
/* * 设置读取位置 */
if(Off == 1)
FileAddress = 0;
else
FileAddress = Off;
result =f_lseek(PicFile, FileAddress);
/* * 读取数据到缓存, 由于FatFS+官方SD卡的方案存在DMA传输上的4字节对齐问题,这里以小于等于一个
* SD卡扇区大小来操作,超过512字节会出错。 */
for(i = 0; i < NumBytesReq / 512; i++)
{
result = f_read(PicFile, &_acBuffer[512*i], 512, &bw);
NumBytesRead += bw;
}
result = f_read(PicFile, &_acBuffer[512*i], NumBytesReq % 512, &bw);
NumBytesRead += bw;
/* * 让指针ppData指向读取的函数 */
*ppData = (const U8 *)&_acBuffer[0];
/* * 返回读取的字节数 */
return NumBytesRead;
}
void ShowBmpFun(void)
{
uint8_t *uwInternelBuffer;
uint8_t XSize=0,YSize=0;
uint32_t bytesread = 0; /* File write/read counts */
FATFS SDFatFs; /* File system object for SD card logical drive */
FIL MyFile; /* File object */
char SDPath[40] = {"0"}; /* SD card logical drive path */
uwInternelBuffer = (uint8_t *)0xC0300000; //1024x768x4
char SDPath_Name[] = "image04.bmp";
uint32_t uwBmplen = 0;
/*##-1- Link the micro SD disk I/O driver ##################################*/
if(FATFS_LinkDriver(&SD_Driver, SDPath) == 0)
{
/*##-2- Register the file system object to the FatFs module ##############*/
if(f_mount(&SDFatFs, (TCHAR const*)SDPath, 0) != FR_OK)
{
/* FatFs Initialization Error */
Error_Handler();
}
else
{
if(f_open(&MyFile, "image04.bmp", FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS) != FR_OK) //图片打开后
{
/* 'STM32.TXT' file Open for read Error */
Error_Handler();
}
else
{
/*##-8- Read data from the text file ###########################*/
//res = f_read(&MyFile, rtext, sizeof(rtext), (UINT*)&bytesread);
/* Open a file and copy its content to an internal buffer */
GUI_Delay(20); //加延时效果不大
GUI_Delay(120);
XSize = GUI_BMP_GetXSizeEx(_GetData, &MyFile);
YSize = GUI_BMP_GetYSizeEx(_GetData, &MyFile);
//GUI_Delay(20);
GUI_BMP_DrawEx(_GetData, &MyFile, 100, 100);
f_close(&MyFile);
}
}
}
}
main()
{
GUI_Delay(200);
GUI_Delay(200);
ShowBmpFun();
GUI_Delay(10);
GUI_Delay(20);
GUI_Delay(200);
}
问题:image04.bmp为480X272,24位的bmp图片,但显示时,XSize=224,YSize =16,实际显示时也是只显示224X16那么大,我反复改_acBuffer[480*4]这个数组大小,无论改多大图像宽度的4倍,这个注意了),倒是480*4效果能好一些。其它的大小,倒达不到224X16,可能224X10 |
|