先说一下调色的一些基本概念
? ?? ???图片的色彩主要由色相、饱和度、明度决定。色相主要是说色彩的变化,比如红色变化后变成绿色。饱和度是说颜色的鲜艳、丰富程度。而明度则是强调明暗,最暗则为全黑,最亮为全白。明度的概念比较好理解。下面用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 RadioButton如何设置默认选中
- android 怎么重新设置锚点
- android 图片对象获取的有关问题
- android 关于服务连接的疑义
- android 怎么实现对view的放大和缩小
- android ID,该如何处理
- 准备复习2-3个月,看java+android,请问有经验者,怎么看效果最好》
- android UI线程与AsyncTask的有关问题
- android(java) 中文乱码的有关问题
- android 动态设立控件高度
- Android test project 编译方法
- android 4.03启动出错,显示"Encryption Unsuccessful"该如何解决
- Android 下面的listView的动态效果怎么实现的?求源代码,多谢
- Android?Palm?Symbian?Windows Mobile?学哪个有“钱图”?解决方案
- Android 开发语言,该怎么解决
- 单个人去做手机开发选什么平台好?android,iphone?解决办法
- Android 虚拟机崩溃的有关问题
- 想学学移动平台的开发 android 还是windows phone7好啊该怎么处理
- Android 上的如何读写设备文件
- Android 2.2 API 汉语文档系列(3) —— AccessibilityService
- 【先睹为快】ArcGIS Android SDK上一版本新特性
- ArcGIS for Android app v2.0.4公布
- android.hardware.USB种介绍
- android linux开发 在线电子书解决方案