0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【AWTK使用经验】加载和释放外部图片

ZLG致远电子 2024-04-26 08:25 次阅读

AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何加载外部资源?如何设计自定义进度条?这些都会在系列文章进行解答。

加载指定路径的图片资源

AWTK默认加载资源方式有两种,一种是将资源打包到程序中放入Flash,另一种是放在res资源目录中。假设现在需要实现一个图片浏览器并移植到 ZTP800示教器 设备上,该图片浏览器需要加载U盘图片,此时就要用到AWTK加载外部资源的功能来实现该需求。下面将分为有文件系统和无文件系统两种情况来介绍此功能。7482606a-0363-11ef-9118-92fbcf53809c.png图1ZTP800示教器加载U盘图片效果

1. 有文件系统

在有文件系统时若想加载非AWTK默认目录结构的图片资源,可以使用:file://+图片所在路径的形式来加载图片,并且可以使用C代码或者xml形式来加载。

1.1 C代码方式:

widget_t*image=widget_lookup(win,"image",TRUE);image_set_image(image, "file:///media/sda1/AWTK.png");

1.2 XML方式:

window>

2. 无文件系统

若是在没有文件系统的设备中加载外部图片,可以先读取图片文件数据,再将数据作为参数传给 assets_manager_add_data()函数。该函数会将数据添加到AWTK资源管理器中,添加后就可以通过文件名的形式来显示图片了。

下面是一段STM32平台加载SD卡图片的示例代码:

uint8_tread_buffer[512];intsdcard_status=HAL_SD_ReadBlocks(&sd_handle,(uint8_t*)read_buffer,0,1,0xffff);if(sdcard_status==HAL_OK){ assets_manager_add_data(assets_manager(),"AWTK",ASSET_TYPE_IMAGE,ASSET_TYPE_IMAGE_PNG,read_buffer,size); image_set_image(image,"AWTK");}


释放图片资源并重新加载

假设目前实现了图片浏览器并移植到了ZTP800示教器上,但是需要图片浏览器加载的图片名称固定不变,而本地图片数据会经常发生改变,这时候就需要在AWTK重新加载并更新图片到画面中。

AWTK在加载一张图片时,会先将图片缓存到assets_manager资源管理器当中,接着再解码放到image_manager图片管理器,最后显示的图片来自图片管理器解码好的图片,因此对于上面的需求就要手动卸载与重新加载图片缓存。下图为ZTP800示教器上的示例程序重新加载图片前后效果图:

749d8ec6-0363-11ef-9118-92fbcf53809c.png

图2示例程序的初始图

74b8d47e-0363-11ef-9118-92fbcf53809c.png

图2示例程序的初始图

1. 卸载图片缓存

假设在示例程序中已经加载并显示了一张图片,并且此时本地图片文件数据发生了改变,可以按照以下步骤卸载图片管理器和资源管理器上的图片缓存。

#defineIMAGE_NAME"/media/sda1/AWTK.png"//图片名默认为assets_manager_load_file加载的路径
staticret_ton_unload_button_click(void*ctx,event_t*e){//点击卸载图片按钮卸载图片缓存 bitmap_tbitmap={0}; widget_t*win=WIDGET(ctx); widget_t*image=widget_lookup(win,"image",TRUE);
//卸载图片管理器缓存image_manager_get_bitmap(image_manager(),IMAGE_NAME,&bitmap);image_manager_unload_bitmap(image_manager(),&bitmap);
//卸载资源管理器缓存assets_manager_clear_cache_ex(assets_manager(),ASSET_TYPE_IMAGE,IMAGE_NAME);widget_invalidate(image,NULL);
returnRET_OK;}

上面代码中image_manager_unload_bitmap是用于卸载图片在图片管理器的缓存卸载缓存成功后会输出“unload image xxx”的debug信息;assets_manager_clear_cache_ex是用于卸载资源管理器的该图片缓存。

2. 重新加载图片缓存

卸载图片缓存后,可以通过以下步骤再次加载图片到资源管理器中:

staticret_ton_load_button_click(void*ctx,event_t*e){//点击加载图片按钮重新加载图片缓存 widget_t*win=WIDGET(ctx); widget_t*image=widget_lookup(win,"image",TRUE);
//将新的图片数据添加到资源管理器缓存中 asset_info_t*img=assets_manager_load_file(assets_manager(),ASSET_TYPE_IMAGE,IMAGE_NAME); assets_manager_add(assets_manager(), img);
image_set_image(image, IMAGE_NAME);
widget_invalidate(image,NULL);
returnRET_OK;}

上面代码调用assets_manager_load_file与assets_manager_add重新加载了一次图片数据到AWTK资源管理器的缓存,此时加载的数据是新的图片数据。

后续在调用image_set_image以及widget_invalidate刷新图片控件时会自动将位于资源管理器的缓存解码并放到图片管理器当中,最后显示新的图片数据。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • GUI
    GUI
    +关注

    关注

    3

    文章

    662

    浏览量

    39872
  • 示教器
    +关注

    关注

    2

    文章

    29

    浏览量

    3789
  • awtk
    +关注

    关注

    0

    文章

    46

    浏览量

    250
收藏 人收藏

    评论

    相关推荐

    AWTK使用经验】如何响应物理按键

    AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何加载
    的头像 发表于 06-06 08:25 857次阅读
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>经验</b>】如何响应物理按键

    AWTK使用经验】如何添加中文输入法

    AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何加载
    的头像 发表于 06-20 08:25 1113次阅读
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>经验</b>】如何添加中文输入法

    AWTK使用经验】如何更换AWTK SDK与渲染模式

    AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何播放摄像头画面?如何更换
    的头像 发表于 08-01 08:25 1154次阅读
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>经验</b>】如何更换<b class='flag-5'>AWTK</b> SDK与渲染模式

    什么是AWTKAWTK有哪些主要特色?

    什么是AWTKAWTK有哪些主要特色?
    发表于 06-16 06:43

    AWTK主要特色

    一、前言刚拿到字节offer,经历了5次面试,其中4轮技术面,1轮HR面试。在这里分享一下自己的面试经验和学习心得。希望能够帮助更多的小伙伴。我本科毕业于四川师范学院计算机系,刚毕业时也是小白,也是
    发表于 08-20 07:28

    请问一下怎样使用AWTK Designer把图片文件打包成数据的

    请问一下怎样使用AWTK Designer把图片文件打包成数据的?
    发表于 02-10 07:40

    基于openharmony适配移植的图片加载

    项目介绍 项目名称:Sketch 所属系列:openharmony的第三方组件适配移植 功能:一款强大且全面的图片加载器,除了图片加载的必备功能外,还支持 GIF,手势缩放、分块显示超
    发表于 03-22 14:41 3次下载

    如何在LabVIEW中清晰加载图片呢?

    有开发者提出,在使用LabVIEW开发图片加载显示程序时,为什么明明看着很清晰的图片,LabVIEW加载显示后就变得粗糙,线条不流畅。
    的头像 发表于 12-20 09:08 1950次阅读
    如何在LabVIEW中清晰<b class='flag-5'>加载</b><b class='flag-5'>图片</b>呢?

    AWTK使用经验】如何设计立体电池进度条?

    AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何加载
    的头像 发表于 04-18 08:25 504次阅读
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>经验</b>】如何设计立体电池进度条?

    AWTK使用经验】如何自定义combo_box下拉框样式

    AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何加载
    的头像 发表于 05-23 08:25 521次阅读
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>经验</b>】如何自定义combo_box下拉框样式

    AWTK使用经验】如何播放视频或摄像头画面

    AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何加载
    的头像 发表于 07-04 08:25 701次阅读
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>经验</b>】如何播放视频或摄像头画面

    AWTK使用经验】如何实现序列帧动画

    AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何加载
    的头像 发表于 07-18 08:25 478次阅读
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>经验</b>】如何实现序列帧动画

    AWTK使用经验】如何在AWTK显示阿拉伯文本

    AWTK是基于C语言开发的跨平台GUI框架。AWTK使用经验系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何播放视频或摄像头画面?如何播放序列帧动画?这些都会在系列文
    的头像 发表于 09-12 08:07 410次阅读
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>经验</b>】如何在<b class='flag-5'>AWTK</b>显示阿拉伯文本

    AWTK使用经验】如何裁剪字库以及如何使用点阵字

    AWTK是基于C语言开发的跨平台GUI框架。AWTK使用经验系列文章将介绍开发AWTK过程中一些常见问题与解决方案。AWTK如何裁剪字库在
    的头像 发表于 10-10 08:05 333次阅读
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>经验</b>】如何裁剪字库以及如何使用点阵字

    AWTK使用经验】如何使用系统输入法与开启最大化窗口功能

    导读AWTK是基于C语言开发的跨平台GUI框架。AWTK使用经验系列文章将介绍开发AWTK过程中一些常见问题与解决方案。AWTK具有跨平台的
    的头像 发表于 11-14 01:05 332次阅读
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>经验</b>】如何使用系统输入法与开启最大化窗口功能