android 图片调色


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

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


A.饱和度B.色相C.亮度D.全部色相


色相表现为色轮的旋转角度。

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

饱和度表现为距离色轮中心的距离

颜色相对于所选像素的起始颜色值,从色轮中心向外移动,或从外向色轮中心移动。数值的范围可以从 -100 到 +100。

明亮度则表现为RGB各分量的大小,0表示最暗,255表示最亮

代码:

           Bitmap show;                                         //这就是原始的图片

           int flag;                                                 // 比特位0 表示是否改变色相,比位1表示是否改变饱和度,比特位2表示是否改变明亮度

            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);                     //设置抗锯齿,也即是边缘做平滑处理

            ColorMatrix cm1=new ColotMatrix(); //用于颜色变换的矩阵,android  位图颜色变化处理主要是靠该对象完成
            ColorMatrix cm2=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);      //将颜色变化后的图片输出到新创建的位图区
            return bmp;                        //返回新的位图,也即调色处理后的图片

                           

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值