本文是我在看过eclipse_xu大神的课程之后做的一些笔记,希望可以很好的掌握Android图片处理的相关知识。
一、图像色彩变换
1、RGBA模型和色相、饱和度、亮度
RGBA是在R(Red)G(Green)B(Blue)模式上增加了alpha通道,alpha通道是不透明度。
色相/色调:物体传递的颜色
ColorMatrix hueMatrix = new ColorMatrix();
hueMatrix.setRotate(0, hue); //R
hueMatrix.setRotate(1, hue); //G
hueMatrix.setRotate(2, hue); //B
饱和度:颜色的准度,从0(灰)到100%(饱和)来进行描述
ColorMatrix saturationMatrix = new ColorMatrix();
saturationMatrix.setSaturation(saturation);
亮度:颜色的相对明暗程度
ColorMatrix lumMatrix = new ColorMatrix();
// 4*5的色彩矩阵,第0、6、12、18位分别对应以下各个数值,分别控制红、绿、蓝和透明度
lumMatrix.setScale(lum, lum, lum, 1);
在图像处理中,我们可以通过上面几种Android API来调整图片对应的色相、饱和度和亮度。将其封装进一个方法中,方便以后调用。
/**
* @param bitmap 图像,传进来的bitmap是默认不可修改的,所以要重新创建一个与原图相同大小的Bitmap
* @param hue 色相
* @param saturation 饱和度
* @param lum 亮度
* @return 返回一张修改后的图片
*/
public static Bitmap handleImageEffect(Bitmap bitmap, float hue, float saturation, float lum) {
Bitmap bmp = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp); //拥有一张与我们传进来的Bitmap一样大小的画布,之后的操作都讲在画布上完成
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); //抗锯齿
//这里必须要使用三个ColorMatrix,用一个只会有一个调整生效
ColorMatrix hueMatrix = new ColorMatrix();
hueMatrix.setRotate(0, hue); //R
hueMatrix.setRotate(1, hue); //G
hueMatrix.setRotate(2, hue); //B
ColorMatrix saturationMatrix = new ColorMatrix();
saturationMatrix.setSaturation(saturation);
ColorMatrix lumMatrix = new ColorMatrix();
lumMatrix.setScale(lum, lum, lum, 1);
ColorMatrix imageMatrix = new ColorMatrix();
imageMatrix.postConcat(hueMatrix);
imageMatrix.postConcat(saturationMatrix);
imageMatrix.postConcat(lumMatrix);
paint.setColorFilter(new ColorMatrixColorFilter(imageMatrix));
canvas.drawBitmap(bitmap, 0, 0, paint);
return bmp;
}
2、矩阵变化
ColorMatrix,Matrix是矩阵的意思。上面我们所做的操作其实也是对颜色矩阵进行处理,使图片展现出各种的变化。
下图中的初始化矩阵,当它与任何颜色矩阵分量相乘得到的仍然是之前的颜色矩阵分量(像素点),所以它才被当做初始化矩阵。
如下图所示,如果将左下角的矩阵带入,我们会得到R+100,G+100,B和透明度A不变的一个像素点
将第二个矩阵带入,会得到一个R,B,A不变,G*2的像素点
做一个例子,展示矩阵对图片的影响
3、像素点分析
通过上面两部分的分析,我们知道ColorMatrix实际上是通过一个特定的矩阵去改变每一个像素点,甚至我们可以为每一个像素点添加不同的修改方法。比如我们在各种图片处理App中经常见到的底片效果、黑白照片、浮雕效果。如下图