调色的基本概念
图片的色彩主要由色相、饱和度、明度决定。
-
色相主要是说色彩的变化,比如红色变化后变成绿色。
-
饱和度是说颜色的鲜艳、丰富程度。
-
明度是强调明暗,最暗则为全黑,最亮为全白。
色轮
色相
色相表现为色轮的旋转角度。设定值反映像素原来的颜色在色轮中旋转的度数。正值表示顺时针旋转,负值表示逆时针旋转。数值的范围可以从 -180 到 +180。
饱和度
饱和度表现为距离色轮中心的距离。颜色相对于所选像素的起始颜色值,从色轮中心向外移动,或从外向色轮中心移动。数值的范围可以从 -100 到 +100。
明度
明度表现为RGB各分量的大小,0表示最暗,255表示最亮。
颜色变换代码
公共代码
//从资源文件中得到原始图片 Bitmap show=BitmapFactory.decodeResource(getResources(), R.drawable.test); int wi =show.getWidth(); //得到宽度 int he =show.getHeight(); //得到高度 //创建一个相同尺寸的可变的位图区,用于绘制调色后的图片 Bitmap bmp =Bitmap.createBitmap(wi, he,Bitmap.Config.ARGB_8888); Canvas canvas = new Canvas(bmp); //创建画布对象 Paint paint = new Paint(); //新建paint //设置抗锯齿,也即是边缘做平滑处理 paint.setAntiAlias(true); ... 在这里设置cm,详见下文。 ... paint.setColorFilter(new ColorMatrixColorFilter(cm));//设置颜色变换效果 //将颜色变化后的图片输出到新创建的位图区 canvas.drawBitmap(show, 0, 0, paint); return bmp; //返回新的位图,也即调色处理后的图片
调整色相
//创建用于颜色变换的矩阵,android位图颜色变化处理主要是靠该对象完成 ColorMatrix cm = new ColotMatrix(); //设置就是色轮旋转的角度,正值表示顺时针旋转,负值表示逆时针旋转,范围-180~180 int rR = 100; int rG = 100; int rB = 100; cm.setRotate(0, rR); //控制让红色区在色轮上旋转rR度 cm.setRotate(1, rG); //控制让绿色区在色轮上旋转rG度 cm.setRotate(2, rB); //控制让蓝色区在色轮上旋转rB度
调整饱和度
//设置饱和度值,最小可设为0,此时对应的是灰度图(即“黑白图”),为1表示饱和度不变,设置大于1,表示过饱和 float saturation = 0; ColorMatrix cm = new ColotMatrix(); cm.setSaturation(saturation);
调整明度
//设置明度调整正值,表示亮度比例,取值小于1,表示亮度减弱,否则亮度增强 float sR = 0.5f; float sG = 0.5f; float sB = 0.5f; float a = 0.5f; ColorMatrix cm = new ColotMatrix(); //分别调整红、绿、蓝三分量,最后一个参数a表示透明度 cm.setScale(sR, sG, sB, a);
效果叠加
ColorMatrix cm1 = new ColotMatrix(); .... ColorMatrix cm2 = new ColotMatrix(); .... cm1.postConcat(cm2); //使cm1效果为cm1和cm2的叠加