OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3699|回复: 3

求助:STM32F103 emWin 背景加载不出SD卡中的bmp图片

[复制链接]

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2018-11-9
在线时间
43 小时
发表于 2020-3-19 19:04:57 | 显示全部楼层 |阅读模式
40金钱
本帖最后由 ZHY98 于 2020-3-19 19:06 编辑

static int BmpGetData(void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off)
{
static int readaddress=0;
FIL * phFile;
UINT NumBytesRead;
#if SYSTEM_SUPPORT_UCOS
  OS_CPU_SR cpu_sr;
#endif

phFile = (FIL *)p;

if (NumBytesReq > sizeof(bmpBuffer))
{
  NumBytesReq = sizeof(bmpBuffer);
}

if(Off == 1) readaddress = 0;
else readaddress=Off;
#if SYSTEM_SUPPORT_UCOS
  OS_ENTER_CRITICAL(); //ÁÙ½çÇø
#endif
f_lseek(phFile,readaddress);

//¶ÁÈ¡Êý¾Ýµ½»º³åÇøÖÐ
f_read(phFile,bmpBuffer,NumBytesReq,&NumBytesRead);
#if SYSTEM_SUPPORT_UCOS
  OS_EXIT_CRITICAL(); //Í˳öÁÙ½çÇø
#endif
*ppData = (U8 *)bmpBuffer;
return NumBytesRead;//·µ»Ø¶ÁÈ¡µ½µÄ×Ö½ÚÊý
}

int dispbmpex(u8 *BMPFileName,u8 mode,u32 x,u32 y,int member,int denom)
{
char result;
int XSize,YSize;
float Xflag,Yflag;
GUI_COLOR forecolor,bkcolor;
forecolor=GUI_GetColor();   //»ñÈ¡µ±Ç°Ç°¾°É«
bkcolor=GUI_GetBkColor();   //»ñÈ¡µ±Ç°±³¾°É«

result = f_open(&BMPFile,(const TCHAR*)BMPFileName,FA_READ); //´ò¿ªÎļþ
//Îļþ´ò¿ª´íÎó
if(result != FR_OK)  return 1;
  
switch(mode)
{
  case 0: //ÔÚÖ¸¶¨Î»ÖÃÏÔʾͼƬ
   if((member == 1) && (denom == 1)) //ÎÞÐèËõ·Å£¬Ö±½Ó»æÖÆ
   {
    GUI_BMP_DrawEx(BmpGetData,&BMPFile,x,y);//ÔÚÖ¸¶¨Î»ÖÃÏÔʾBMPͼƬ
   }else //·ñÔòͼƬÐèÒªËõ·Å
   {
    GUI_BMP_DrawScaledEx(BmpGetData,&BMPFile,x,y,member,denom);
   }
   break;
  case 1: //ÔÚLCDÖмäÏÔʾͼƬ
   XSize = GUI_BMP_GetXSizeEx(BmpGetData,&BMPFile); //»ñȡͼƬµÄXÖá´óС
   YSize = GUI_BMP_GetYSizeEx(BmpGetData,&BMPFile); //»ñȡͼƬµÄYÖá´óС
   if((member == 1) && (denom == 1)) //ÎÞÐèËõ·Å£¬Ö±½Ó»æÖÆ
   {

    GUI_BMP_DrawEx(BmpGetData,&BMPFile,(lcddev.width-XSize)/2-1,(lcddev.height-YSize)/2-1);
   }else
   {
    Xflag = (float)XSize*((float)member/(float)denom);
    Yflag = (float)YSize*((float)member/(float)denom);
    XSize = (lcddev.width-(int)Xflag)/2-1;
    YSize = (lcddev.height-(int)Yflag)/2-1;
    GUI_BMP_DrawScaledEx(BmpGetData,&BMPFile,XSize,YSize,member,denom);
   }
   break;
}
f_close(&BMPFile);  //¹Ø±ÕBMPFileÎļþ
GUI_SetColor(forecolor);  //»Ö¸´Ç°¾°É«
GUI_SetBkColor(bkcolor);  //»Ö¸´±³¾°É«
return 0;
}  



case WM_PAINT:

      GUI_SetBkColor(GUI_WHITE);
      GUI_Clear();
      dispbmpex("0:/Laserph.bmp",0,100, 300, 1,1);

   break;
在这个方式下图片刷不出来,dispbmpex就是原子哥bmp例程里的。
但是原子哥的程序单独可以运行
void bmpdisplay_demo(void)
{
GUI_SetBkColor(GUI_BLUE);
GUI_SetColor(GUI_RED);
// GUI_SetFont(&GUI_FontHZ16);
GUI_Clear();
dispbmpex("0:/Laserph.bmp",0,0, 0, 1, 1);
}
这样子可以运行
求助帮忙,谢谢了


最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2018-11-9
在线时间
43 小时
 楼主| 发表于 2020-3-19 19:04:58 | 显示全部楼层
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2020-3-20 00:51:16 | 显示全部楼层
仿真找下问题
回复

使用道具 举报

1

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
98
金钱
98
注册时间
2018-11-9
在线时间
43 小时
 楼主| 发表于 2020-3-20 20:18:06 | 显示全部楼层

调试了一下,发现bmp实验工程里的bmpfile变量能读到数,移植后,数组为空,后面不太清楚应该怎么调试了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 17:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表