硬汉嵌入式论坛

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

[emWin] 测试将GUI_BITMAP Bitmap;设置为全局变量可以正常为一个button上面显示流位图。但是定义多个button,则显示位图为无或者不正c...

[复制链接]

14

主题

37

回帖

79

积分

初级会员

积分
79
发表于 2020-11-18 09:11:21 | 显示全部楼层 |阅读模式
测试将GUI_BITMAP Bitmap;设置为全局变量可以正常为一个button上面显示流位图。但是定义多个button,则显示位图为无或者不正常。但单独显示正常
分别测试为:
单独测试:
button_01:      _ShowAngleBinBMP_Flash_button("APP.dta");

button_02:      _ShowBinBMP_Flash_Button("SYS.dta");

放在一起:
_ShowAngleBinBMP_Flash_button("APP.dta");
_ShowBinBMP_Flash_Button("SYS.dta");

以上皆为初始化时显示,也放在过while循环里面,也是不能显示两个或者多个button位图。单独一个button可以显示正常。

汉子哥是否测试过此方法创建多个button,显示位图正常?


如下链接 9#有图片展示效果
http://www.armbbs.cn/forum.php?mod=viewthread&tid=14578&page=1#pid205579
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
发表于 2020-11-18 11:58:32 | 显示全部楼层
GUI_BITMAP Bitmap;等相关的几个变量最好分别定义。一个控件一个。
回复

使用道具 举报

5

主题

244

回帖

259

积分

高级会员

积分
259
发表于 2020-11-18 15:08:59 | 显示全部楼层
GUI_BITMAP结构体里面的成员都是针对一张位图的,里面还有图片数据缓冲区和调色板的指针,所以需要一张图独占一个结构体变量
回复

使用道具 举报

14

主题

37

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2020-11-18 18:25:36 | 显示全部楼层
eric2013 发表于 2020-11-18 11:58
GUI_BITMAP Bitmap;等相关的几个变量最好分别定义。一个控件一个。

汉子哥,里面变量我都是定义的一个控件对应一个。两个按钮写了两个函数。
这是相关参数的全局变量:
GUI_BITMAP bitmap_test1,bitmap_test2;
GUI_LOGPALETTE Palette_file1;
BUTTON_Handle bBUTTON_test1,bBUTTON_test2;
回复

使用道具 举报

14

主题

37

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2020-11-18 18:26:34 | 显示全部楼层
DX3906 发表于 2020-11-18 15:08
GUI_BITMAP结构体里面的成员都是针对一张位图的,里面还有图片数据缓冲区和调色板的指针,所以需要一张图独 ...

两个button分别拥有独自的 全局变量:
如下:
GUI_BITMAP bitmap_test1,bitmap_test2;
GUI_LOGPALETTE Palette_file1;
BUTTON_Handle bBUTTON_test1,bBUTTON_test2;
回复

使用道具 举报

14

主题

37

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2020-11-18 18:28:42 | 显示全部楼层
DX3906 发表于 2020-11-18 15:08
GUI_BITMAP结构体里面的成员都是针对一张位图的,里面还有图片数据缓冲区和调色板的指针,所以需要一张图独 ...

图片缓冲区 就像汉子哥一样,使用GUI_malloc  分配的动态内存,然后释放动态内存。并未使用一个button对应一个缓存数组,图片大的话,数组占用ram内存也大,不合适
回复

使用道具 举报

14

主题

37

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2020-11-18 18:32:41 | 显示全部楼层
eric2013 发表于 2020-11-18 11:58
GUI_BITMAP Bitmap;等相关的几个变量最好分别定义。一个控件一个。

第一个函数:
char _ShowBinBMP_Flash_Button(char *pName)
{

        /*使用动态内存*/
        int num;
        GUI_HMEM hMem;
        uint8_t *_acBuffer = NULL;
        FRESULT result;
        int size;//1024*10;                //hope small than 16KB
        size = ReadPicDataSize_From_FLASH((uint8_t*)pName);       
        printf("PNMAE = %s size = %d\r\n",pName,size);
        /*创建一个按钮*/
        bBUTTON_test1 = BUTTON_Create(0, 105, 100, 100, ID_BUTTON_file_2, WM_CF_SHOW);
        hMem = GUI_ALLOC_AllocZero(size);
        _acBuffer = GUI_ALLOC_h2p(hMem);
         /* 读取图片数据到动态内存中 */
        bindBmpFileData_flash_02(_acBuffer, (uint8_t *)pName);
        GUI_CreateBitmapFromStream(&bitmap_test1, &Palette_file2, _acBuffer);
//        BUTTON_SetBitmap(bBUTTON_test1, BUTTON_BI_UNPRESSED, &bitmap_test1);

//                                                GUI_DrawBitmap(&bitmap_file1,0,0);       
        GUI_ALLOC_Free(hMem);
                               
   return 1;

}

第二个函数:
基本一致,除了必须参数,一个控件对应一个全局变量
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
发表于 2020-11-19 08:23:45 | 显示全部楼层
ZMLZML1009 发表于 2020-11-18 18:32
第一个函数:
char _ShowBinBMP_Flash_Button(char *pName)
{

这个空间不可以释放 GUI_ALLOC_Free(hMem);
回复

使用道具 举报

14

主题

37

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2020-11-19 08:57:21 | 显示全部楼层
eric2013 发表于 2020-11-19 08:23
这个空间不可以释放 GUI_ALLOC_Free(hMem);

啊咧,不释放的话,图片多的话那就必须上SDRAM了,要不然内存越用越少了。对不带SDRAM外设的不友好了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
发表于 2020-11-19 13:56:54 | 显示全部楼层
ZMLZML1009 发表于 2020-11-19 08:57
啊咧,不释放的话,图片多的话那就必须上SDRAM了,要不然内存越用越少了。对不带SDRAM外设的不友好了

那得想办法了,怎么动态配置方便些。
回复

使用道具 举报

14

主题

37

回帖

79

积分

初级会员

积分
79
 楼主| 发表于 2020-11-19 15:02:07 | 显示全部楼层
eric2013 发表于 2020-11-19 13:56
那得想办法了,怎么动态配置方便些。

我试过不释放动态内存,确实可以正常显示多个button,使用emwin自带函数查看动态内存使用情况,确实内存变多了。

目前测试,如果动态直接释放,但放在窗口重绘里面,就可以正常显示,但还没做 按键点击释放处理。

另一种就是还是要用到外部ram,可以在切换界面时释放内存,切回来再占用。这样只是相对会少占用外部ram,不必将图片都读取到内存大的外部SDRAM中,一直占用使用。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-19 21:02 , Processed in 0.277085 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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