调色的基本概念

图片的色彩主要由色相、饱和度、明度决定。

  • 色相主要是说色彩的变化,比如红色变化后变成绿色。
  • 饱和度是说颜色的鲜艳、丰富程度。
  • 明度是强调明暗,最暗则为全黑,最亮为全白。

色轮

色相

色相表现为色轮的旋转角度。设定值反映像素原来的颜色在色轮中旋转的度数。正值表示顺时针旋转,负值表示逆时针旋转。数值的范围可以从 -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的叠加
posted on 2011-10-25 22:49  情定诺坎普  阅读(718)  评论(0编辑  收藏  举报