图片资源¶
FAQ1 Solution中,可以使用哪些图片资源? 那些图片资源需要转换?¶
Solution 可以处理如下一些图片类资源。
文件类型 |
处理方式 |
|---|---|
png |
该类型需要使用 eZIP 进行转换 |
png 序列帧 |
该类型需要使用 eZIP 进行转换。序列帧介绍参见序列帧打包 |
apng |
该类型需要使用 eZIP 进行转换 |
gif |
该类型需要使用 eZIP 进行转换 |
jpg |
该类型采用软硬件结合的方式进行解码,需要先解码才能送去渲染 |
mp4 |
该类型目前采用软解(部分硬件)解码,推荐支持尺寸为240x240,需要使用ffmpeg进行转换(参数优化) |
eZIP 工具存放在目录
\sdk\tools\png2ezip下面eZIP 具体使用方法参见eZIP 命令。
FAQ2 Solution中,图片资源存放位置是否需要遵循某些规则? 是否需要手动转换?¶
在 Solution 中,图片资源的存放位置有具体的规则要求,工具会根据存放的子目录自动进行相应的转换。
在 Solution 中的存放位置具体参见图片资源及存放位置的介绍。注意: 必须严格遵循这个规则。
编译时,Butterfli 工具会调用 eZIP 工具对资源目录对应分辨率进行相应的转换。
Nor方案和builtin_res的方案中,主代码中会转换为xxx.c,并生成对应的xxx_header.h参与编译
Nand的文件系统方案中,主代码中会转换为文件(png转换为bin,gif转换为agif,jpg和mp4直接原样copy)
外置表盘及外置应用,由于运行在文件系统中,因此会统一转换为文件。
FAQ3 使用序列帧打包和采用N张png图片用LVGL实现有什么区别?¶
两种方式都能实现一样的效果,但序列帧打包具有以下优势:
eZIP 提供了序列帧打包功能,可以把 N 张相同 PNG 图片打包在一起,生成一个文件。通过调用专用的序列帧接口
lv_img_set_src_seq就可以实现对某张 PNG 的播放,也可以调用控件lvsf_seq_frame(接口定义参见lvsf_seq_frame.h)来实现动画的播放。序列帧打包只生成一个文件,特别适用于外置表盘/外置应用以及 NAND 文件系统方案的场景。通过这种方式提高了存储利用率以及访问速度。
FAQ4 如何评估一个产品中图片资源大致占用的空间? 从而选定flash的大小?¶
首先在一个目录下存放所有的图片资源。 有两种存放方式:
确定存放的父目录(如d:\images),然后再该目录下建立以下目录。并按照图片资源及存放位置严格分类存放各种资源。
+ common + ezip + no_ezip + gif + jpg + mp4
所有的图片资源都放在一个目录(如d:\images)下。(该种方式存在的问题是,旋转图片是非压缩图片,但由于只有一个目录,eZIP将按照压缩处理。因此,会导致评估不准)
假定这个资源放在d:\images目录下,基于52x芯片,则评估命令为:
ezip -dir d:\images -binfile 2 -chip sf52x -outdir images_out注:eZIP 使用方法参见eZIP 命令。
统计输出目录(如上面命令是images_out)下所有文件占用的size。
根据统计的size,预留一定的空间(如20%~30%)就可以确定图片资源占用的空间。
FAQ5 png的图片什么情况下需要选择带alpha的?什么情况下不需要带alpha的?¶
带 alpha 的 PNG 图片(也常称 PNG-32)是包含透明通道的格式,能实现图片背景 / 边缘的透明效果;不带 alpha 的 PNG 图片(也常称 PNG-24)无透明通道,仅保留 RGB 色彩信息。具体选择场景如下:
需要选择带 Alpha 通道的场景
当图片需要与不同底色(如界面背景、渐变图层、动态背景)融合,或存在不规则 / 镂空 / 半透明效果时,必须使用带 Alpha 的 PNG:
不需要选择带 Alpha 通道的场景
当图片为纯实色背景、无透明需求,或追求更小文件体积 / 更高加载效率时,使用不带 Alpha 的 PNG
不需要带apha的图片(如背景)如果选择带了alpha,一方面会增加存储空间,另外一方面会降低渲染速度。
eZIP 处理 PNG 图片时,基本原则是:原图带 Alpha 将转换为带 Alpha 格式的 eZIP,原图不带 Alpha 将转换为不带 Alpha 格式的 eZIP。
FAQ6 为什么有些 GIF 图片用 eZIP 转换之后很大?¶
问题:GIF 转换为 AGIF 之后,是直接送 ePIC 的硬件,不需要解码再送去渲染。因此对于 GIF 是一张大图,但只有
局部动画的场景,可能生成出来的 AGIF 会特别大。解决方案:把这个 GIF 分为几个部分,一张静态底图,再加上一个或多个 GIF 动画。
FAQ7 为什么图片用 eZIP 转换之后和原图差不多,甚至比原图大很多?¶
eZIP 转换时,必须使用
-binfile 2参数,不能用-cfile 2、-cfile 1或-binfile 1由于转换的原图是 PNG 格式,因此这个图已经是经过压缩的。一般来讲,eZIP 转换后的尺寸会比 PNG 稍小或差不多。
FAQ8 为什么有些jpg不能显示?¶
目前 Solution 方案中,支持 JPG 图片,具体如下:
只支持基线
JPEG(Baseline JPEG),尚不支持渐进式JPEG(Progressive JPEG)和JPEG2000。在 55x/56x/52x 芯片上,JPG 是软硬结合解码,相比于纯软解码效率要高很多,但不能与 eZIP(PNG)硬件解码速度相比,需要注意使用场景,否则会影响帧率。58x 以及后续芯片支持 JPG 硬件解码;
Solution 中显示 JPG 图片无论哪个平台都使用同一个接口(
lv_img_set_src),中间层进行了适配。
因此,如果是从手机端推送,需要注意转换为Baseline的格式。
FAQ9 MP4(H.264)格式使用是否有限制?¶
MP4 在固件端显示需要经过 FFmpeg 的转换,具体转换方法参见JPG/H.264。
建议 MP4 的视频分辨率限制在 240x240。
FAQ10 PC 仿真(simulator)时图片是否使用的是eZIP压缩格式?¶
PC仿真时,使用的是像素格式。
FAQ11 eZIP在哪些操作系统平台上可以使用?¶
eZIP有以下一些版本,但Solution包里面默认只带了windows的版本。
Windows 版本:
\sdk\tools\png2ezip下Linux 版本: 需要找FAE获取
MAC 版本: 需要找FAE获取
FAQ12 怎么确认内存中的eZIP图片数据是否是正确的?¶
如果需要确认内存中的eZIP图片数据是否是正确:
可以导出内存,然后参照eZIP压缩文件反解为png文件命令反解
如果能够反解为png图片,点击后能够正常显示,则能够确认数据是正确的。
注意: 非压缩的图片不支持反解。
FAQ13 图片资源应该放到 ezip、ezip_dither 还是 no_ezip 目录?¶
可以按图片用途快速判断:
普通非旋转 PNG 图片放
ezip,编译时会转换为 eZIP 压缩资源;非旋转但有渐变、且目标方案使用 RGB565 时,放
ezip_dither,用于降低渐变色分层;需要旋转的图片放
no_ezip,会转换为像素格式,不做 eZIP 压缩;GIF、JPG、MP4、mask 图片分别放到
gif、jpg、mp4、mask目录。