dispbmp("48032032.bmp",0, 0, 0, 1,1);? 打开图片文件失败 ???

2019-07-21 01:26发布



int dispbmp(u8 *BMPFileName, u8 mode, u16 x, u16 y, int member, int denom)
{
 u16 bread;
 char result;
 int XSize,YSize;
 float Xflag,Yflag;

  u16 *_aMemory = (u16 *)EXT_SRAM_ADDR;

 if( SD_Detect() == SD_NOT_PRESENT )                    //检测磁盘是否插好
  return 1;
 
 if(f_mount(&fs_sd, "0:", 0) != FR_OK)                       // Register a work area for logical drive 0  挂载SD卡
  return 1; 

 result = f_open(&BMPFile,  (const TCHAR*)BMPFileName,  FA_READ);   //打开32位的.bmp图片时,出错,不知道为何 ??
 //文件打开错误或者文件大于BMPMEMORYSIZE
 if((result != FR_OK) || (BMPFile.fsize > BMPMEMORYSIZE))  
  return 1;
 result = f_read(&BMPFile, (u8 *)_aMemory, BMPFile.fsize, (UINT *)&bread);              //读取数据
 if(result != FR_OK) return 3;
 
 switch(mode)
 {
  case 0: //在指定位置显示图片
   if((member == 1) && (denom == 1)) //无需缩放,直接绘制
   {
    GUI_BMP_Draw((u8 *)_aMemory, x, y); //在指定位置显示BMP图片
   }else //否则图片需要缩放
   {
    GUI_BMP_DrawScaled((u8 *)_aMemory,x,y,member,denom);
   }
   break;
   
  case 1: //在LCD中间显示图片
   XSize = GUI_BMP_GetXSize((u8 *)_aMemory); //获取图片的X轴大小
   YSize = GUI_BMP_GetYSize((u8 *)_aMemory); //获取图片的Y轴大小
   if((member == 1) && (denom == 1)) //无需缩放,直接绘制
   {
    //在LCD中间显示图片
    GUI_BMP_Draw((u8 *)_aMemory,(LCD_35_WIDTH-XSize)/2-1,(LCD_35_HEIGHT-YSize)/2-1);
   }
   else //否则图片需要缩放
   {
    Xflag = (float)XSize*((float)member/(float)denom);
    Yflag = (float)YSize*((float)member/(float)denom);
    XSize = (LCD_35_WIDTH-(int)Xflag)/2-1;
    YSize = (LCD_35_HEIGHT-(int)Yflag)/2-1;
    GUI_BMP_DrawScaled((u8 *)_aMemory,XSize,YSize,member,denom);
   }
   break;
   
  default : break;
 }
 
 f_close(&BMPFile);    //关闭BMPFile文件
 f_mount(NULL, "0:", 0);  //f_mount(0, NULL);     // 卸载文件系统 , 文件挂起来
 
 return 0;
}


//  打开这个32位图片的.bmp 图片出错,请问是什么情况 ????
dispbmp("48032032.bmp",0, 0, 0, 1,1);        // 显示480x320.bmp图片,32位的bmp图片

// 打开下面这些图片文件都正常,
dispbmp("4803201.bmp",0, 0, 0, 1,1);         // 显示480x320.bmp图片,1位的bmp图片 
dispbmp("4803204.bmp",0, 0, 0, 1,1);         // 显示480x320.bmp图片,4位的bmp图片  
dispbmp("4803208.bmp",0, 0, 0, 1,1);          // 显示480x320.bmp图片,8位的bmp图片
dispbmp("48032016.bmp",0, 0, 0, 1,1);          // 显示480x320.bmp图片,16位的bmp图片
dispbmp("48032024.bmp",0, 0, 0, 1,1);         // 显示480x320.bmp图片,24位的bmp图片 


还有使用 下面这个函数打开32位的.bmp图片文件,完全木有任何问题。
dispbmpEx("48032032.bmp",0, 0, 0, 1,1);        // 显示480x320.bmp图片,32位的bmp图片












友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。