Android之给图片去色,返回灰度图片以及ColorMatrix中setSaturation方法的用法
原图:
效果图:
实现以上效果其实很简单,直接上代码:
public class MainActivity extends Activity {private Button btn_start;private ImageView img;private Bitmap bitmap;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.image_layout);initView();}private void initView() {img = (ImageView) findViewById(R.id.iv_image);btn_start = (Button) findViewById(R.id.btn_start);bitmap = ((BitmapDrawable) img.getDrawable()).getBitmap();btn_start.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {Bitmap bm = ImageTools.toGrayscale(bitmap);img.setImageBitmap(bm);}});}
}
看下ImageTools工具类中的方法:
/** *//*** 图片去色,返回灰度图片* * @param bmpOriginal* 传入的图片* @return 去色后的图片*/public static Bitmap toGrayscale(Bitmap bmp) {if (bmp != null) {int width, height;Paint paint = new Paint();height = bmp.getHeight();width = bmp.getWidth();Bitmap bm = Bitmap.createBitmap(width, height,Bitmap.Config.RGB_565);Canvas c = new Canvas(bm);ColorMatrix cm = new ColorMatrix();cm.setSaturation(0);ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);paint.setColorFilter(f);c.drawBitmap(bmp, 0, 0, paint);return bm;}else{return bmp;}}
实现去色重点用到了ColorMatrix类中的setSaturation方法,如果去查看官网API的话,这个方法下有这么一段说明:
Set the matrix to affect the saturation of colors. A value of 0 maps the color to gray-scale. 1 is identity.
意思是去设置颜色矩阵的饱和度,0是灰色的,1是原图,那这个方法是不是只能设置0或1呢?其实不是,我们看下
setSaturation源码是如何实现的:
public void setSaturation(float sat) {reset();float[] m = mArray;final float invSat = 1 - sat;final float R = 0.213f * invSat;final float G = 0.715f * invSat;final float B = 0.072f * invSat;m[0] = R + sat; m[1] = G; m[2] = B;m[5] = R; m[6] = G + sat; m[7] = B;m[10] = R; m[11] = G; m[12] = B + sat;}
关于设置图片颜色的原理请参看《
一起学android之利用ColorMatrix进行图片的各种特效处理(32)
》
我们接着看上面的代码,第一步调用了reset方法,我们看下reset方法:
/*** Set this colormatrix to identity:* [ 1 0 0 0 0 - red vector* 0 1 0 0 0 - green vector* 0 0 1 0 0 - blue vector* 0 0 0 1 0 ] - alpha vector*/public void reset() {final float[] a = mArray;for (int i = 19; i > 0; --i) {a[i] = 0;}a[0] = a[6] = a[12] = a[18] = 1;}
其实就是将颜色矩阵中的值进行初始化。
接着看就会发现,给图片去色,就是改变颜色矩阵中的值。
将setSaturation中的值设成3看看:
public static Bitmap toGrayscale(Bitmap bmp) {if (bmp != null) {int width, height;Paint paint = new Paint();height = bmp.getHeight();width = bmp.getWidth();Bitmap bm = Bitmap.createBitmap(width, height,Bitmap.Config.RGB_565);Canvas c = new Canvas(bm);ColorMatrix cm = new ColorMatrix();cm.setSaturation(3);ColorMatrixColorFilter f = new ColorMatrixColorFilter(cm);paint.setColorFilter(f);c.drawBitmap(bmp, 0, 0, paint);return bm;}else{return bmp;}}
效果如下:
通过改变颜色矩阵值,可以实现一些比较好看的效果。
转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/45244049 情绪控_
Android之给图片去色,返回灰度图片以及ColorMatrix中setSaturation方法的用法相关推荐
- MATLAB应用实战系列(七十一)-MATLAB实战应用案例:图像处理将灰度图片变成负片彩色图片转换成灰度图片
前言 本文目录 获取图片的信息 将灰度图片变成负片 彩色图片转换成灰度图片 图像噪声的添加 加10次噪声 colorbar的使用 将数据转换为图片 clc clearA是结构体名,用来存储读入的图像数 ...
- 【学习笔记】简易的24位BMP图片转换成灰度图片
简易的24位BMP图片转换成灰度图片的C语言实现 使用C语言实现的一个简易的24位BMP图片转换成灰度图片的程序.需要先准备一张24位的BMP图片. 说明 RGB图片转换成灰度图片主要是使用这个公式: ...
- c# winform 把彩色图片转换为灰色的图片,变灰,灰度图片,速度很快,safe,unsafe
把彩色图片转换为灰色的图片,直接用.net接口遍历每个像素点转换的效率非常低,800K的图片65万像素我的电脑要用5分钟,而用了unsafe,速度提高了几千倍,同样的图片只用了0.几秒 附一个常用的遍 ...
- python中input()函数的返回是什么类型_Python中input函数的用法是什么?
"input()"函数是输入函数,用于接受一个标准输入数据,且返回string类型.在Python3中,去除了"raw_input()"函数,仅保留了" ...
- Android中inflate方法的用法
Inflate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的,没有找到的同时并显示功能.最近做的一个项目就是这一点让我迷茫了好几天. android上还有一个与Inflate()类 ...
- Android开发之adb命令输入文本到手机输入框中的方法
当我们使用模拟器调试,有时候输入法不方便输入或者被限制输入部分文本格式了,如何输入? 这来就有了如下命令了:adb shell input text "123456789" 我们看 ...
- 搭建Android+QT+OpenCV环境,实现“单色图片着色”效果
OpenCV是我们大家非常熟悉的图像处理开源类库:在其新版本将原本在Contrib分库中的DNN模块融合到了主库中,并且更新了相应文档.这样我们就能够非常方便地利用OpenCV实现一些属于DeepLe ...
- 把图片做成html,HTML5实践-图片设置成灰度图
以前,在web上要显示灰度图片的话,只有手工使用图片软件转换.但是现在借助于html5的canvas可以实现这个过程,而不需要再借助图片编辑软件了.我用html5和jquery做了一个demo,来展示 ...
- python程序代码图片_完整的图片去噪代码(python)
#coding:utf-8 import sys,os from PIL import Image,ImageDraw #二值判断,如果确认是噪声,用改点的上面一个点的灰度进行替换 #该函数也可以改成 ...
最新文章
- 实战SSM_O2O商铺_23【商铺列表】Controller层开发
- js json对象转字符串_Mock.js模拟数据实现前端独立开发
- javaweb之Filter详解
- VSS (Visual Source Safe 2005) 用法详解(转载)
- php使用curl实现get和post请求的方法,数据传输urldecode和json
- 大数据学习笔记54:HBase概述
- 专注计算机专业知识讲授,计算机一级考试MS Office上机指导
- Python matplotlib生成图片背景透明
- python语言的特点强制可读_python程序语言设计第二讲(笔记)
- SQL 语言特点、功能和数据类型
- 尚硅谷大数据之Linux
- TextView设置字体透明度或背景透明度
- Stata:终极匹配ultimatch
- 奇迹暖暖服务器不稳定,奇迹暖暖有几个服务器
- win8无权限访问这台计算机,win8电脑IPv4显示无internet访问权限的解决方法
- 2021上海建筑施工八大员之安全员模拟题集及答案解析
- 优衣库推全新门店概念,背后意义何在?
- Android开发学习——记单词APP安卓注册登录跳转
- 国家发明专利:基于改进型黏菌优化算法的业务资源分配方法
- HTTP服务器响应状态信息