(六)android recovery 升级UI显示之资源文件
来源:互联网 发布:百视通网络电视下载 编辑:程序博客网 时间:2024/06/16 12:00
Recovery只有在升级的时候才会呈现给用户,所以界面一般都很简单,没有android上层那么绚丽,所以recovery下面对图片的支持很有限,仅支持png图片显示,所以我们可以看到,recovery下面所有的背景以及提示信息,都是以png格式图片的资源文件存在。一般的厂商都会觉得,原生的机器人很low,都会重新整理一套升级显示的UI,但并非所有的png图片recovery都是支持的,下面我们来分析下recovery下png资源文件的支持。
6.1 资源文件路径以及分类
我们资源文件的路径在SDK中的bootable/recovery/res-相关的目录中,针对不同的DPI的场景,分别有不同的资源文件:
一般情况下,dpi对应的分辨率如下:
mdpi HVGA 480*320
hdpi WVGA 800*480
FWVGA 854*480
QHD 960*540
xhdpi 720P 1280*720
xxhdpi 1080P 1920*1080
xxxhdpi 4K 4096×2160
针对分辨率,PPI DPI分不清的,可以参考之前的一篇博客:分辨率 PPI DPI概念定义详解http://blog.csdn.net/csdn66_2016/article/details/70331919
6.2 PNG支持的种类
并非所有的PNG图片,在recovery下面都可以显示,这也是很多人会遇到的问题,明明是png图片,怎么还是不能显示呢,recovery原生对png图片的支持如下:
bit_depth channels color_type
8 3 2
<=8 1 0
<=8 1 3
其中bit_depth是位深度, channels是指支持的颜色的种类,color_type是值颜色类型。我们需要记住的是:
bit_depth不能大于8。
color_type值有 PNG_COLOR_TYPE_GRAY(0)
PNG_COLOR_TYPE_RGB(2)
PNG_COLOR_TYPE_PALETTE(3)
channels值,与color_type有关,PNG_COLOR_TYPE_GRAY与PNG_COLOR_TYPE_PALETTE时,只有一种颜色,PNG_COLOR_TYPE_RGB时有三种颜色
6.3 判断PNG属性方法
我们上节描述了,通过三个属性,来看一个png图片是否能在recovery中显示,当我们拿到一个png图片的时候,怎么分析呢,我们可以写个小的获取png info的程序。
第一步:编译libpng.a库文件
我们从官网下载png的源码,http://www.libpng.org/pub/png/libpng.html,然后在服务器解压,然后编译:./configure CC=gcc --prefix=$PWD/_install, make, make install; 然后就可以生成libpng.a以及png.h相关文件了。
第二步:写sample
pnginfo.c
#include <stdlib.h>#include <string.h>#include <stdio.h>#include "png.h"int main(int argc ,char **argv) { unsigned char header[8]; size_t bytesRead; int result = 0; FILE* fp = NULL; png_structp png_ptr = NULL; png_infop info_ptr = NULL; int color_type, bit_depth; png_uint_32 width; png_uint_32 height; png_byte channels; if (argc !=2 ) { printf("eg:./pnginfo png_name\n"); return -1; } fp = fopen(argv[1], "rb"); if (fp == NULL) { result = -1; goto exit; } bytesRead = fread(header, 1, sizeof(header), fp); if (bytesRead != sizeof(header)) { result = -2; goto exit; } if (png_sig_cmp(header, 0, sizeof(header))) { result = -3; goto exit; } png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr) { result = -4; goto exit; } info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) { result = -5; goto exit; } if (setjmp(png_jmpbuf(png_ptr))) { result = -6; goto exit; } png_init_io(png_ptr, fp); png_set_sig_bytes(png_ptr, sizeof(header)); png_read_info(png_ptr, info_ptr); png_get_IHDR(png_ptr, info_ptr, &width, &height, &bit_depth, &color_type, NULL, NULL, NULL); channels = png_get_channels(png_ptr, info_ptr); printf("pnginfo bit_depth:%d, channels:%d, color_type:%d\n", bit_depth, channels, color_type);exit: if (fp != NULL) { fclose(fp); fp = NULL; } printf("pnginfo result:%d\n", result); return result; }makefile:
CC=gccTARGET=pnginfo%.o:%.c$(CC) -c $(CFLAGS) $(CPPFLAGS) -o $@ $<all:pnginfo.o$(CC) -o $(TARGET) $< -L. -lpng -lz -lmclean:rm -rf *.o $(TARGET)
执行make即可生成pnginfo
第三步:获取png属性
./pnginfo icon_error.png
6.4 png转换
如果我拿到的png图片,不支持怎么办呢,我们可以使用PS工具,把png图片转换为recovery可支持的格式即可,如果又不太会使用PS工具呢,还有个更简单的方法,采用QQ的截图功能,然后另存为png图片即可,QQ截图保存的png是标准的RGB格式,即bit_depth(8)channels(3)color_type(2)
6.5 总结
通过上述了解,现在知道了recovery的图片资源文件png的信息了,怎么去判断png是否能够在recovery中显示,以及如果制作recovery支持的png背景图片了。
- (六)android recovery 升级UI显示之资源文件
- android OTA 升级优化之三: recovery ui美化
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节 .
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- Android系统Recovery工作原理之使用update.zip升级过程分析(六)---Recovery服务流程细节
- 社交系统ThinkSNS+研发日记四:如何做到 Laravel 配置可以网站后台配置
- scikit-learn工具学习
- Android Retrofit 2.0(一)初识介绍
- MAC上charles使用教程总结
- struts2的数据校验
- (六)android recovery 升级UI显示之资源文件
- ffmpeg的相关方法封装
- navicat远程连接mysql出现1130的错误
- [leetcode] 582. Kill Process
- 1.数字证书的知识
- 解析mysql不重复字段值求和
- 杭州落户-人才引进(其他)-挂靠人才中心 办理经验
- mysql数据库的主从复制原理以及减少主从复制的延迟方法
- JAVA中ByteArrayInputStream和ByteArrayOutputStream详解