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

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

3天内不再提示

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

ZLG致远电子 2024-07-18 08:25 次阅读

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

假设目前想在AWTK中显示炫酷流畅的图片动画,此时可以用video_image控件来播放序列帧动画。本篇文章将介绍该控件的原理和使用方法。

图1ZTP800示教器运行video_image控件demo效果

video_image控件播放序列帧动画优点

video_image控件采用了帧间差异的图像算法,在压缩位图时会计算并保存每一帧之间的脏矩形区域和数据,接着将这些差异数据压缩成自定义的视频文件,最后再采用lz4算法对视频文件进一步压缩。在video_image控件播放视频文件时会先用lz4算法解压视频文件,再将帧间差异解析组合成位图播放。下面是video_image控件播放序列帧相比较MP4、MJPG与GIF等常见格式的优点:

对比格式

播放序列帧方式的优点

MJPG

MJPG动画文件占用空间大,JPG的解压速度慢;video_image的帧间差异图像算法能够很大程度降低空间上的消耗,包括内存和文件系统空间,同时解压速度也会更快。

GIF

GIF只支持8位色,并且不支持半透;而video_image动画可支持32位色,并且支持半透显示。

MP4

MP4压缩率较高,解压位图需要消耗较大性能,需要依赖硬件解码才能流畅播放;而video_image控件可以用在中低端平台,解码消耗性能会较低,动画会更流畅。

video_image控件的使用方法

首先,在AWStudio插件列表安装awtk-widget-video-image控件,并编译video_image控件工程,会在awtk-widget-video-image/bin目录下生成相关工具:gif_to_frame_gen工具可以将GIF转换成一张张位图序列帧;diff_image_to_video_gen工具可以将这些位图序列帧压缩成video_image控件支持播放的自定义视频文件。

4374991e-449c-11ef-817b-92fbcf53809c.png

图2AWStudio插件列表的video_image控件将GIF转换成位图序列帧

假设目前的GIF名称为zlg.gif,可以在bin文件夹输入下面命令将GIF转成位图序列帧,工具的详细参数可以看控件目录下的README.md文档:

./gif_to_frame_gen.exe ./zlg.gif ./my_image/

43897c6c-449c-11ef-817b-92fbcf53809c.png

图3使用工具将GIF转成位图序列帧

将位图序列帧合成自定义视频文件

同样是在bin目录下可以使用diff_image_to_video_gen工具将位图序列帧合成自定义视频文件。工具的设置的参数比较多,详细参数说明可以看控件目录下的README.md文档,示例命令如下:

./diff_image_to_video_gen.exe ./my_image/ frame%d ./my_image/video_gif RGB565 30

438da3e6-449c-11ef-817b-92fbcf53809c.png

图4diff_image_to_video_gen工具生成自定义视频文件

在AWTK程序播放序列帧

将上面生成的自定义视频文件通过AWStudio导入到资源浏览器的“其他数据”分类项,接着再设置video_image控件的video_name属性为视频文件名称,最后打包编译运行程序即可。

439144f6-449c-11ef-817b-92fbcf53809c.png

图5添加与设置视频文件到应用中

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

    关注

    6

    文章

    1925

    浏览量

    72695
  • C语言
    +关注

    关注

    180

    文章

    7579

    浏览量

    135387
  • awtk
    +关注

    关注

    0

    文章

    38

    浏览量

    200
收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    OpenHarmony实战开发-如何实现动画

    请求动画 请求动画时通过requestAnimationFrame函数逐回调,在调用该函数时传入一个回调函数。 runframe在调用
    发表于 05-06 14:11

    AWTK-MVVM是什么?其功能有哪些

    AWTK-MVVM是一套为AWTK用C语言开发,并支持各种脚本语言的MVVM框架,实现了数据绑定、命令绑定和窗口导航等基本功能,使用AWTK-MVVM开发应用程序,无需学习
    发表于 12-15 06:07

    在QML动画设计中通过指定关键创建时间线动画

    在QML动画设计中,可以通过指定关键创建时间线动画;还可以将时间线绑定到组件(如滑块)的属性值,以这种方式控制动画
    的头像 发表于 10-10 11:27 1990次阅读

    如何在OpenHarmony上实现动画

    动画是常见的一种动画呈现形式,本例就为大家介绍如何通过 translate(),setInterval(),clearAllInterval() 等方法实现
    的头像 发表于 06-18 15:14 807次阅读
    如何在OpenHarmony上<b class='flag-5'>实现</b>逐<b class='flag-5'>帧</b><b class='flag-5'>动画</b>?

    AWTK 开源智能串口屏方案

    修改数据,自动更新界面。主要特色1.开发强大的界面设计器AWStudio;基于AWTK实现强大的GUI功能(多窗口、输入法、动画和各种控件);基于AWTK-MVVM
    的头像 发表于 12-02 08:24 807次阅读
    <b class='flag-5'>AWTK</b> 开源智能串口屏方案

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

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

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

    AWTK是基于C语言开发的跨平台GUI框架。《AWTK使用经验》系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何加载外部资源?如何设计自定义进度条?这些都会在系列文章
    的头像 发表于 04-26 08:25 367次阅读
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>经验</b>】加载和释放外部图片

    通过视频提取及批量取模转换实现基于STC32的点阵LED动画播放

    通过视频提取及批量取模转换实现基于STC32的点阵LED动画播放
    的头像 发表于 06-27 02:16 289次阅读
    通过视频<b class='flag-5'>帧</b>提取及批量取模转换<b class='flag-5'>实现</b>基于STC32的点阵LED<b class='flag-5'>动画</b>播放

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

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

    图片动画控件和Video image控件的使用方法

    在UI开发过程中,序列帧基本是绕不开的,AWTK 支持多种方法实现序列帧显示,本文介绍图片动画控件和Video image控件的使用方法。
    的头像 发表于 08-06 16:44 578次阅读
    图片<b class='flag-5'>动画</b>控件和Video image控件的使用方法

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

    AWTK是基于C语言开发的跨平台GUI框架。AWTK使用经验系列文章将介绍开发AWTK过程中一些常见问题与解决方案,例如:如何播放视频或摄像头画面?如何播放
    的头像 发表于 09-12 08:07 228次阅读
    【<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 131次阅读
    【<b class='flag-5'>AWTK</b>使用<b class='flag-5'>经验</b>】如何裁剪字库以及如何使用点阵字