硬汉嵌入式论坛

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

[emWin] 请教下,使用 iconview 控件时,能否直接从sd卡中读取bmp格式的图片进行显示啊 ?

[复制链接]

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
发表于 2018-6-11 14:57:53 | 显示全部楼层 |阅读模式
请教下,使用 iconview 控件时,能否直接从sd卡中读取bmp格式的图片进行显示啊 ?

我看很多貌似都是 先把 图片文件转换为 .c 或者是 .dat 格式的,有没有什么方法在使用 iconview 控件时,直接读取 sd 卡 里面的图片
进行显示 ??

另外如果 可以的话,那直接读取到的 图片 显示的 坐标又该如何确定啊  ???

因为有可能图片名称发生了变化,那么读取到的图片文件的先后顺序 就不一定了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-6-12 01:14:00 | 显示全部楼层
1、直接读取的话,不方面,最好还是转换成流位图或者C。

2、这个最好使用统一大小的图片。
回复

使用道具 举报

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
 楼主| 发表于 2018-6-12 09:54:25 | 显示全部楼层
本帖最后由 hpdell 于 2018-6-12 09:58 编辑
eric2013 发表于 2018-6-12 01:14
1、直接读取的话,不方面,最好还是转换成流位图或者C。

2、这个最好使用统一大小的图片。

看来还是转换为为 .c 的吧,瘤位图与 .c 从使用上看还是 .c的使用比较普遍些,
如果使用 .c 格式类型的话,我想吧这个 .c 的图标数据放在 spi 的flash 里面,在每次开机初始化时再 全部读出来保存在 sdram 里面,以后需要使用时之间调用就行,
这个方法可行不啊 ??

直接读取显示 就放弃了啊,
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115765
QQ
发表于 2018-6-12 14:44:09 | 显示全部楼层
hpdell 发表于 2018-6-12 09:54
看来还是转换为为 .c 的吧,瘤位图与 .c 从使用上看还是 .c的使用比较普遍些,
如果使用 .c 格式类型的 ...

如果是存到外部Flash里面,使用流位图,流位图是个专门的xxx.dat文件,方便存。
回复

使用道具 举报

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
 楼主| 发表于 2018-6-12 17:19:42 | 显示全部楼层
eric2013 发表于 2018-6-12 14:44
如果是存到外部Flash里面,使用流位图,流位图是个专门的xxx.dat文件,方便存。

好的,我试试看
回复

使用道具 举报

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
 楼主| 发表于 2018-6-13 19:23:16 | 显示全部楼层
本帖最后由 hpdell 于 2018-6-13 22:12 编辑
eric2013 发表于 2018-6-12 14:44
如果是存到外部Flash里面,使用流位图,流位图是个专门的xxx.dat文件,方便存。

使用流位图显示 图标成功,多谢多谢了啊
目前有个问题,向你请教下,就是 在 读取 *.tda 流位图数据申请内存后,貌似不能给释放,


        // 在指定位置创建指定尺寸的ICONVIEW 小工具
        hIcon = ICONVIEW_CreateEx(x,         // 小工具的最左像素(在父坐标中)
                                                   y,                                             // 小工具的最上像素(在父坐标中)
                                                         w,               // 小工具的水平尺寸(单位:像素)
                                                         h,                     // 小工具的垂直尺寸(单位:像素)
                     hParent,                                 // 父窗口的句柄。如果为0 ,则新小工具将成为桌面(顶级窗口)的子窗口
                                                         WM_CF_SHOW | WM_CF_HASTRANS,  // 窗口创建标记。为使小工具立即可见,通常使用 WM_CF_SHOW
                     ICONVIEW_CF_AUTOSCROLLBAR_V, // 默认是0,如果不够现实可设置增减垂直滚动条
                                                         Id,                                 // 小工具的窗口ID
                                                         ICON_Width,                         // 图标的水平尺寸
                                                         ICON_Height);                // 图标的垂直尺寸,图标和文本都包含在里面,不要大于ICONVIEW的高度,导致Text显示不完整       
       
       
        for(i=0; i<(BitmapNum); i++)  // 目前图标总数量 QSPI_ICONVIEW_PICTURE_ADDR_12+1
        {
                result = f_open(&ICONVIEW_File, pBm.pFileName,  FA_READ );
                if (result != FR_OK) return 0;
               
                _IconViewBuff =  (uint8_t *)GUI_MYmalloc(ICONVIEW_File.obj.objsize);  //申请内存
                                                                              
                                                            
                _IconViewCom   = _IconViewBuff;
                result = f_read(&ICONVIEW_File, _IconViewCom, ICONVIEW_File.obj.objsize, &bw);
                if (result != FR_OK)
                {
                        __IO uint8_t c;
                       
                        for(c=0;c<i;c++)  //之前申请到的内存全部释放
                        {
                                _IconViewCom   = _IconViewBuff[c];
                                GUI_MYfree((void *) _IconViewCom);       
                        }
                        return 0;
                }
             f_close(&ICONVIEW_File);
               
                _IconViewCom   = _IconViewBuff;
                ICONVIEW_AddStreamedBitmapItem   (hIcon, ( const void *) _IconViewCom, pBm.pTextCn);

            // 方法一 释放内存
            _IconViewCom   = _IconViewBuff[c];
            GUI_MYfree(_IconViewCom   );                      //此处释放内存后 ,貌似 图标显示的都是最后一个??????????????
        }



//方法二释放内存
for(i=0; i<(BitmapNum); i++)  
{
           _IconViewCom   = _IconViewBuff;
            GUI_MYfree(_IconViewCom   );                      //此处释放内存后 ,显示的第 一个图标显示不出来 ??????????????

}








回复

使用道具 举报

0

主题

138

回帖

138

积分

初级会员

积分
138
QQ
发表于 2018-6-14 09:09:22 | 显示全部楼层
释放了内存,图片都没数据了怎么刷新呢
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
发表于 2018-6-15 14:06:52 | 显示全部楼层
[img][/img]要一直有效地址
回复

使用道具 举报

17

主题

70

回帖

121

积分

初级会员

积分
121
发表于 2018-6-15 14:07:27 | 显示全部楼层
1314一路向前 发表于 2018-6-15 14:06
[/img]要一直有效地址

Additional information
Note that the bitmap pointer needs to remain valid.
回复

使用道具 举报

681

主题

3485

回帖

5553

积分

论坛元老

积分
5553
 楼主| 发表于 2018-6-15 20:31:52 | 显示全部楼层
刚刚已经测试过了,这个申请的内存可以释放的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-17 07:37 , Processed in 0.273594 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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