前言
在之前的几次课当中我们已经详细了解到整个android程序,从启动再到绘制的整体流程,从这中间我们又牵扯出了Canvas绘制图形的画板和我们的Paint控制色彩样式的画笔,那么之前基础篇我们就不进行详细的解释,那些API在之前的基础篇已经公布出来,我也注释的非常详细,今天我门来了解Paint高级篇真正需要了解的滤镜
滤镜
1.滤镜效果
从上图我们可以看到 四张滤镜效果图像,其色彩的显示效果各不一样,也就是说所谓滤镜其实只不过是对于原本图像色彩进行调整,那么需要对图像的色彩进行调整操作,我们会需要知道几个概念,那就是我们的图像构成,颜色通道,颜色模式以及颜色举证
2.图像构成
在具体讲滤镜之前,今天我们先来系统化真正认识一下在我们计算机当中我们的图像到底是什么,我们都知道在计算机体系当中我们的图像有各种各样的格式,比如jpg,png,gif等等…
那么我们同样也知道我们计算机当中的图像文件其实实际也就是一个二进制的字节码文件,那么这个图像本质上来说是一个二进制文件,然后我们的cpg,gpu对二进制文件进行识别再显示到我们的屏幕上,那么我们现在需要关注的是,这些文件当中他到底保存的是什么?
其实一个图像文件当中,他保存的数据总体分为两块
- 图像的信息
- 图像的数据
后者好理解,我们可以理解为图像具体的那些像素点的数据,那么前者其实我们可以理解为,是一组信息,这组信息的作用是让我们的cpg,gpu在显示图像的时候,基于我门设定的这组信息的规则不同,那么显示的效果不一样,
以一种格式(PNG)为例,我在网上扒出了对于这个图像的结构的解释(粗略看一下就好)
PNG的文件结构
对于一个PNG文件来说,其文件头总是由位固定的字节来描述的:
十进制数 137 80 78 71 13 10 26 10
十六进制数 89 50 4E 47 0D 0A 1A 0A
其中第一个字节0x89超出了ASCII字符的范围,这是为了避免某些软件将 PNG文件当做文本文件来处理。文件中剩余的部分由3个以上的PNG的数据块(Chunk)按照特定的顺序组成,因此,一个标准的PNG文件结构应该如下:
PNG文件标志 PNG数据块 …… PNG数据块
PNG数据块(Chunk)
PNG定义了两种类型的数据块,一种是称为关键数据块(critical chunk),这是标准的数据块,另一种叫做辅助数据块(ancillary chunks),这是可选的数据块。关键数据块定义了4个标准数据块,每个PNG文件都必须包含它们,PNG读写软件也都必须要支持这些数据块。虽然PNG文件规范没有要求PNG编译码器对可选数据块进行编码和译码,但规范提倡支持可选数据块。
下表就是PNG中数据块的类别,其中,关键数据块部分我们使用深色背景加以区分。
为了简单起见,我们假设在我们使用的PNG文件中,这4个数据块按以上先后顺序进行存储,并且都只出现一次。
数据块结构
PNG文件中,每个数据块由4个部分组成,如下:
名称 字节数 说明
Length (长度) 4字节 指定数据块中数据域的长度,其长度不超过(231-1)字节
Chunk Type Code