硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4747|回复: 2
收起左侧

[emWin] IMAGE如何显示SD卡图片

[复制链接]

4

主题

5

回帖

17

积分

新手上路

积分
17
发表于 2015-4-11 16:25:46 | 显示全部楼层 |阅读模式
static int _GetData(void * p, const U8 ** ppData, unsigned NumBytesReq, U32 Off)
{
    static int FileAddress = 0;
    UINT NumBytesRead;
    FIL *PicFile;
    FRESULT result;
    PicFile = (FIL *)p;

    /*
    * Check buffer size
    */
    if (NumBytesReq > sizeof(_acBuffer)) {
    NumBytesReq = sizeof(_acBuffer);
    }


    /*
    * Set file pointer to the required position
    */
    if(Off == 1) FileAddress = 0;
    else FileAddress = Off;
    result =f_lseek(PicFile, FileAddress);


    /*
    * Read data into buffer
    */
    result = f_read(PicFile, _acBuffer, NumBytesReq, &NumBytesRead);

    /*
    * Set data pointer to the beginning of the buffer
    */
    *ppData = (const U8 *)_acBuffer;

    /*
    * Return number of available bytes
    */
    return NumBytesRead;
}

/*
*********************************************************************************************************
*    oˉ êy Ãû: _ShowBMPEx
*    1|ÄüËμÃ÷: ÏÔê¾BMPí¼Æ¬
*    DΠ   2ΣosFilename òaÏÔê¾í¼Æ¬μÄÃû×Ö
*    ·μ »Ø Öμ: ÎT
*********************************************************************************************************
*/

static void _ShowBMPEx(IMAGE_Handle hObj,const char * sFilename)
{
    FRESULT result;
    if(f_mount(&SDFatFs, (TCHAR const*)SDPath, 0) != FR_OK)
    {
      Error_Handler();
    }
    /* ′ò¿aÎļt */        
    result = f_open(&MyFile, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
    if (result != FR_OK)
    {
        return;
    }
   
//    XSize = GUI_BMP_GetXSizeEx(_GetData, &file);
//    YSize = GUI_BMP_GetYSizeEx(_GetData, &file);

   
    IMAGE_SetBMPEx(hObj,_GetData, &MyFile);

    f_close(&MyFile);
}
这样操作是否正确?求指点,谢谢。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2015-4-11 16:49:53 | 显示全部楼层
帮顶,这个IMAG控件一直没有去研究如何使用,不好意思了楼主。
回复

使用道具 举报

6

主题

51

回帖

69

积分

初级会员

积分
69
发表于 2015-4-19 10:06:59 | 显示全部楼层
使用cmsis_os文件系统。

hItem = WM_GetDialogItem(hWin, ID_IMAGE_0);                                    //获取IMAGE句柄
sprintf(FileName,"\\\\Image\\\\%02d_%s.bmp",StaffInf.Type,StaffInf.Number);        //拼接文件名
DrawBmpImage(hItem,FileName);                                                //显示照片


//功能:在IMAGE中显示人员照片
//入口:IMAGE句柄、文件名
//出口:无
void DrawBmpImage(WM_HWIN hImage,char *DrawBmpImage)
{
  static GUI_MEMDEV_Handle hMem;

  char        *buf;
  fsFileInfo  info;
  FILE        *fin;
  uint32_t    i;

  info.fileID =0;                                                   
  i=ffind ((const char *)DrawBmpImage,&info);
  if(i==0)
  {//找到文件,显示人员照片
     if(hMem!=NULL)
     {
       GUI_ALLOC_Free(hMem);
     }
     hMem=GUI_ALLOC_AllocNoInit(info.size);                             //申请内存空间
     buf=GUI_ALLOC_h2p(hMem);
     fin = fopen ((const char *)DrawBmpImage,"r");
     fread (buf, info.size, 1, fin);
     fclose (fin);
     IMAGE_SetBMP(hImage, buf, info.size);
  }
  else
  {//显示无照片
     info.fileID =0;                                                   
     ffind ("\\\\SysPictures\\\\NoPhoto.bmp",&info);
     if(hMem!=NULL)
     {
       GUI_ALLOC_Free(hMem);
     }
     hMem=GUI_ALLOC_AllocNoInit(info.size);                             //申请内存空间
     buf=GUI_ALLOC_h2p(hMem);
     fin = fopen ("\\\\SysPictures\\\\NoPhoto.bmp","r");
     fread (buf, info.size, 1, fin);
     fclose (fin);
     IMAGE_SetBMP(hImage, buf, info.size);
  }
}
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-12 12:00 , Processed in 0.219031 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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