图片资源¶
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的播放,也可以调用控件seq_frame(接口是lvsf_seqframe_xxx)来实现动画的播放。序列帧打包只生成一个文件,特别使用与外置表盘/外置应用以及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(h264)格式使用是否有限制?¶
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图片,点击后能够正常显示,则能够确认数据是正确的。
注意: 非压缩的图片不支持反解。