`
lx82319214
  • 浏览: 105663 次
  • 性别: Icon_minigender_1
  • 来自: 贵州
社区版块
存档分类
最新评论

Android 怎么样改变图片颜色

 
阅读更多

先说一下调色的一些基本概念

        图片的色彩主要由色相、饱和度、明度决定。色相主要是说色彩的变化,比如红色变化后变成绿色。饱和度是说颜色的鲜艳、丰富程度。而明度则是强调明暗,最暗则为全黑,最亮为全白。明度的概念比较好理解。下面用photoshop里的图片来说明色相和饱和度。

        色相表现为色轮的旋转角度。
        photo文本框中显示的值反映像素原来的颜色在色轮中旋转的度数。正值表示顺时针旋转,负值表示逆时针旋转。数值的范围可以从 -180 到 +180。

        饱和度表现为距离色轮中心的距离
        颜色相对于所选像素的起始颜色值,从色轮中心向外移动,或从外向色轮中心移动。数值的范围可以从 -100 到 +100。
        明亮度则表现为RGB各分量的大小,0表示最暗,255表示最亮

java代码:
Bitmapshow; //这就是原始的图片
intflag; // 比特位0 表示是否改变色相,比位1表示是否改变饱和度,比特位2表示是否改变明亮度
int wi =show.getWidth(); //得到宽度
int he =show.getHeight(); //得到高度
Bitmap bmp =Bitmap.createBitmap(wi, he,Bitmap.Config.ARGB_8888);
//创建一个相同尺寸的可变的位图区,用于绘制调色后的图片
Canvas canvas = newCanvas(bmp); //得到画笔对象
Paint paint = newPaint(); //新建paint
paint.setAntiAlias(true); //设置抗锯齿,也即是边缘做平滑处理
ColorMatrix cm1=new ColotMatrix(); //用于颜色变换的矩阵,android 位图颜色变化处理主要是靠该对象完成
ColorMatrixcm2=new ColotMatrix();
ColorMatrix cm3=new ColotMatrix();
cm1.reset(); //设为默认值

if ((flag & 1) !=0) //需要改变色相
{
//hueColor就是色轮旋转的角度,正值表示顺时针旋转,负值表示逆时针旋转
cm1.setRotate(0, hueColor); //控制让红**在色轮上旋转hueColor葛角度
cm1.setRotate(1, hueColor); //控制让绿红**在色轮上旋转hueColor葛角度
cm1.setRotate(2, hueColor); //控制让蓝**在色轮上旋转hueColor葛角度
//这里相当于改变的是全图的色相
}
if ((flag & 2) !=0) //需要改变饱和度
{
//saturation 饱和度值,最小可设为0,此时对应的是灰度图(也就是俗话的“黑白图”),
//为1表示饱和度不变,设置大于1,就显示过饱和
cm2.reset();
cm2.setSaturation(saturation);
cm1.postConcat(cm2); //效果叠加
}
if ((flag & 4) !=0)
{
//f 表示亮度比例,取值小于1,表示亮度减弱,否则亮度增强
cm3.reset();
cm3.setScale(f, f, f, 1); //红、绿、蓝三分量按相同的比例,最后一个参数1表示透明度不做变化,此函数详细说明参考 android doc
cm1.postConcat(cm3); //效果叠加
}
paint.setColorFilter(new ColorMatrixColorFilter(cm1));//设置颜色变换效果
canvas.drawBitmap(show,0, 0, paint); //将颜色变化后的图片输出到新创建的位图区
returnbmp; //返回新的位图,也即调色处理后的图片

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics