先说一下调色的一些基本概念
? ?? ???图片的色彩主要由色相、饱和度、明度决定。色相主要是说色彩的变化,比如红色变化后变成绿色。饱和度是说颜色的鲜艳、丰富程度。而明度则是强调明暗,最暗则为全黑,最亮为全白。明度的概念比较好理解。下面用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; //返回新的位图,也即调色处理后的图片
详细解决方案
Android 如何样改变图片颜色
热度:6 发布时间:2016-05-01 20:05:49.0
相关解决方案
- android 读取byte[]中的元素解决方案
- android 标题栏兑现方式
- android 中Activity向BroadcastReceiver发送数据,该怎么解决
- Android 4.0 为什么模拟器老是提示小弟我谷歌拼音输入法已停止
- android:getSharedPreferences() 这是哪个类的方法解决思路
- android 怎么判断一个程序是否联网
- android 大量数据按周分组,该如何解决
- android RadioButton如何设置默认选中
- ksoap2-android-这个包,连接webService怎么设置超时
- android 怎么重新设置锚点
- android UI界面设计解决方案
- android 图片对象获取的有关问题
- android 怎么调用淘宝支付宝接口
- Android 沿袭InputMethodService自定义输入法
- android 关于服务连接的疑义
- android 两个activity如何通信
- android 怎么实现对view的放大和缩小
- android 教程解决方法
- android ID,该如何处理
- 准备复习2-3个月,看java+android,请问有经验者,怎么看效果最好》
- android UI线程与AsyncTask的有关问题
- android(java)中的java.net能不能和c#的system.net.sockets进行tcp通信,该如何解决
- android ListView 中的onItemClick Intent 没法跳转
- android(java) 中文乱码的有关问题
- c#c++,android,ios(iphone),php,java视屏课程 散分
- android Post文件到ASP.NET的有关问题,能收到参数收不到文件
- RIM 替 Android 开发者提供免费的 PlayBook!2月13日前
- android 动态设立控件高度
- Android test project 编译方法
- android -相机使用教程(1)解决方法