硬汉嵌入式论坛

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

[emWin] 为ICONVIEW控件添加流位图要注意调用函数ICONVIEW_EnableStreamAuto()

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2015-8-16 12:24:00 | 显示全部楼层 |阅读模式
使用流位图的好处就是可以方便的将图片放在外部存储器中。相对于现成的BMP,JPEG等图片,
流位图都是以位图形式存在的,可以直接调用进行显示,不需要JPEG等图片的解码操作,所以
显示速度较快。
========================================================
在ICONVIEW使用流位图的时候记得调用函数ICONVIEW_EnableStreamAuto()使能,
使能后就可以调用函数ICONVIEW_AddStreamedBitmapItem添加图标了。
回复

使用道具 举报

0

主题

2

回帖

0

积分

新手上路

积分
0
发表于 2015-8-31 18:11:34 | 显示全部楼层
如何设置ICONVIEW的透明度,急求
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
 楼主| 发表于 2015-8-31 19:36:21 | 显示全部楼层

回 lovebearm 的帖子

lovebearm:如何设置ICONVIEW的透明度,急求
 (2015-08-31 18:11) 
    /* 设置小工具的背景色 32 位颜色值的前8 位可用于alpha混合处理效果*/
    ICONVIEW_SetBkColor(hWin, ICONVIEW_CI_SEL, GUI_WHITE | 0x80000000);
回复

使用道具 举报

3

主题

12

回帖

3

积分

新手上路

积分
3
发表于 2015-10-23 17:29:59 | 显示全部楼层
eric2013 你好, 你有ICONVIEW_AddStreamedBitmapItem的测试代码吗?我试了下,没成功。图片没显示出来,文字显示没问题。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
 楼主| 发表于 2015-10-24 00:25:36 | 显示全部楼层

回 huangbbb2010 的帖子

huangbbb2010:eric2013 你好, 你有ICONVIEW_AddStreamedBitmapItem的测试代码吗?我试了下,没成功。图片没显示出来,文字显示没问题。 (2015-10-23 17:29) 
明天了我找下。GUIBulder本身也是支持ICONVIEW.添加流位图的,你试试
回复

使用道具 举报

3

主题

12

回帖

3

积分

新手上路

积分
3
发表于 2015-10-26 11:58:17 | 显示全部楼层
今天又试了几种方法,发现要先把图片转成*dta,然后再把数据拷出来放到一个C文件,这样就可以显示出来。但如果直接把*.dta文件放到SD卡直接读进来就显示不了,通过串口打印读回来的文件数据没错。可能是由于读回来的Buffer是指针类型,ICONVIEW_AddStreamedBitmapItem无法计算数据大小,所以显示不了。
回复

使用道具 举报

3

主题

12

回帖

3

积分

新手上路

积分
3
发表于 2015-10-26 14:15:16 | 显示全部楼层
eric2013 你好,
  我现在把我的测试程序贴上来,有时间麻烦帮我看一下,为什么我的方法一显示不了,通过串口打印出来的数据是一样的。
static const uint8_t _acImage_0[] =
{
    //This is the data from png to dta.
    //我把dta里面的数据Copy出来,放到这里,显示的和BMP32差不多。
}

void Iconview_Test(void)
{
   
#ifdef ICONVIEW_TEST_WAY_1   
    //此方法没有图片显示。
    uint16_t iLoop;
    FRESULT result;
    GUI_HMEM hMem;
    //char *_acBuffer;
    uint8_t *_acBuffer;
    WM_HWIN hIconview;
   
    hMem = GUI_ALLOC_AllocZero(150000);
    _acBuffer = GUI_ALLOC_h2p(hMem);
    result = f_open(&file, "test.dta", FA_OPEN_EXISTING|FA_READ|FA_OPEN_ALWAYS);
    if(result != FR_OK)
    {
        return;
    }
    result = f_read(&file,_acBuffer,file.fsize,&BytesRead);
    if(result != FR_OK)
    {
        return;
    }
   
    WM_SetDesktopColor(GUI_GREEN);
    printf("\\n==============================================================\\n");
    for(iLoop = 0; iLoop < file.fsize;iLoop++)
    {
        printf("%02X ",_acBuffer[iLoop]);
        if((iLoop + 1)%16 == 0)
            printf("\\n");
    }
    printf("\\n==============================================================\\n");
   
    GUI_EnableAlpha(1);
    ICONVIEW_EnableStreamAuto();
    hIconview = ICONVIEW_CreateEx(20,20,180,180,WM_HBKWIN,WM_CF_SHOW | WM_CF_HASTRANS,0,GUI_ID_ICONVIEW0,80,80);
    ICONVIEW_AddStreamedBitmapItem(hIconview,(const void *)_acBuffer,"Test");
    ICONVIEW_SetBkColor(hIconview, ICONVIEW_CI_SEL, GUI_BLUE | 0xF0000000);
    ICONVIEW_SetFont(hIconview, &GUI_Font13B_ASCII);
   
    GUI_ALLOC_Free(hMem);
    f_close(&file);
#else
    //此方法可以正常显示图片
    uint16_t iLoop;
    WM_HWIN hIconview;
   
    WM_SetDesktopColor(GUI_GREEN);
    printf("\\n==============================================================\\n");
    for(iLoop = 0; iLoop < sizeof(_acImage_0)/sizeof(uint8_t);iLoop++)
    {
        printf("%02X ",_acImage_0[iLoop]);
        if((iLoop + 1)%16 == 0)
            printf("\\n");
    }
    printf("\\n==============================================================\\n");
   
    GUI_EnableAlpha(1);
    ICONVIEW_EnableStreamAuto();
    hIconview = ICONVIEW_CreateEx(20,20,180,180,WM_HBKWIN,WM_CF_SHOW | WM_CF_HASTRANS,0,GUI_ID_ICONVIEW0,80,80);
    ICONVIEW_AddStreamedBitmapItem(hIconview,(const void *)_acImage_0,"Test");
    ICONVIEW_SetBkColor(hIconview, ICONVIEW_CI_SEL, GUI_BLUE | 0xF0000000);
    ICONVIEW_SetFont(hIconview, &GUI_Font13B_ASCII);
   
#endif
   
}
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2015-10-27 15:05:06 | 显示全部楼层
你的问题解决了吗
回复

使用道具 举报

3

主题

12

回帖

3

积分

新手上路

积分
3
发表于 2015-10-27 15:57:40 | 显示全部楼层
问题还没有解决,而且我又发现多了一个问题,在模拟器上可以触发ICONVIEW 的WM_NOTIFICATION_RELEASED但在实际板上无法触发。只能触发WM_NOTIFICATION_CHANGED和WM_NOTIFICATIN_CLICKED.
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2015-10-27 18:24:50 | 显示全部楼层
你的流位图那个显示正常吗,我的怎么显示不出来呢
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
 楼主| 发表于 2015-10-28 00:40:45 | 显示全部楼层

回 huangbbb2010 的帖子

huangbbb2010:
问题还没有解决,而且我又发现多了一个问题,在模拟器上可以触发ICONVIEW 的WM_NOTIFICATION_RELEASED但在实际板上无法触发。只能触发WM_NOTIFICATION_CHANGED和WM_NOTIFICATIN_CLICKED.
注意,SD卡方式时,流位图的动态内存不能释放掉,ICONVIEW要一直使用的。

1.png
回复

使用道具 举报

3

主题

12

回帖

3

积分

新手上路

积分
3
发表于 2015-10-28 09:47:29 | 显示全部楼层

回 eric2013 的帖子

eric2013:注意,SD卡方式时,流位图的动态内存不能释放掉,ICONVIEW要一直使用的。


 (2015-10-28 00:40) 
非常感谢eric2013抽时间帮忙,不释放内存确实可以显示出图片来,那什么时候释放内存会比较合适呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
 楼主| 发表于 2015-10-28 10:14:36 | 显示全部楼层

回 huangbbb2010 的帖子

huangbbb2010:非常感谢eric2013抽时间帮忙,不释放内存确实可以显示出图片来,那什么时候释放内存会比较合适呢? (2015-10-28 09:47) 
你的这种情况貌似不太适合释放掉,释放掉后,再回到ICONVIEW界面后还得重新添加流位图。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-13 04:48 , Processed in 0.427518 second(s), 33 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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