原图:

效果图:

实现以上效果其实很简单,直接上代码:

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方法的用法相关推荐

  1. MATLAB应用实战系列(七十一)-MATLAB实战应用案例:图像处理将灰度图片变成负片彩色图片转换成灰度图片

    前言 本文目录 获取图片的信息 将灰度图片变成负片 彩色图片转换成灰度图片 图像噪声的添加 加10次噪声 colorbar的使用 将数据转换为图片 clc clearA是结构体名,用来存储读入的图像数 ...

  2. 【学习笔记】简易的24位BMP图片转换成灰度图片

    简易的24位BMP图片转换成灰度图片的C语言实现 使用C语言实现的一个简易的24位BMP图片转换成灰度图片的程序.需要先准备一张24位的BMP图片. 说明 RGB图片转换成灰度图片主要是使用这个公式: ...

  3. c# winform 把彩色图片转换为灰色的图片,变灰,灰度图片,速度很快,safe,unsafe

    把彩色图片转换为灰色的图片,直接用.net接口遍历每个像素点转换的效率非常低,800K的图片65万像素我的电脑要用5分钟,而用了unsafe,速度提高了几千倍,同样的图片只用了0.几秒 附一个常用的遍 ...

  4. python中input()函数的返回是什么类型_Python中input函数的用法是什么?

    "input()"函数是输入函数,用于接受一个标准输入数据,且返回string类型.在Python3中,去除了"raw_input()"函数,仅保留了" ...

  5. Android中inflate方法的用法

    Inflate()作用就是将xml定义的一个布局找出来,但仅仅是找出来而且隐藏的,没有找到的同时并显示功能.最近做的一个项目就是这一点让我迷茫了好几天. android上还有一个与Inflate()类 ...

  6. Android开发之adb命令输入文本到手机输入框中的方法

    当我们使用模拟器调试,有时候输入法不方便输入或者被限制输入部分文本格式了,如何输入? 这来就有了如下命令了:adb shell input text "123456789" 我们看 ...

  7. 搭建Android+QT+OpenCV环境,实现“单色图片着色”效果

    OpenCV是我们大家非常熟悉的图像处理开源类库:在其新版本将原本在Contrib分库中的DNN模块融合到了主库中,并且更新了相应文档.这样我们就能够非常方便地利用OpenCV实现一些属于DeepLe ...

  8. 把图片做成html,HTML5实践-图片设置成灰度图

    以前,在web上要显示灰度图片的话,只有手工使用图片软件转换.但是现在借助于html5的canvas可以实现这个过程,而不需要再借助图片编辑软件了.我用html5和jquery做了一个demo,来展示 ...

  9. python程序代码图片_完整的图片去噪代码(python)

    #coding:utf-8 import sys,os from PIL import Image,ImageDraw #二值判断,如果确认是噪声,用改点的上面一个点的灰度进行替换 #该函数也可以改成 ...

最新文章

  1. 实战SSM_O2O商铺_23【商铺列表】Controller层开发
  2. js json对象转字符串_Mock.js模拟数据实现前端独立开发
  3. javaweb之Filter详解
  4. VSS (Visual Source Safe 2005) 用法详解(转载)
  5. php使用curl实现get和post请求的方法,数据传输urldecode和json
  6. 大数据学习笔记54:HBase概述
  7. 专注计算机专业知识讲授,计算机一级考试MS Office上机指导
  8. Python matplotlib生成图片背景透明
  9. python语言的特点强制可读_python程序语言设计第二讲(笔记)
  10. SQL 语言特点、功能和数据类型
  11. 尚硅谷大数据之Linux
  12. TextView设置字体透明度或背景透明度
  13. Stata:终极匹配ultimatch
  14. 奇迹暖暖服务器不稳定,奇迹暖暖有几个服务器
  15. win8无权限访问这台计算机,win8电脑IPv4显示无internet访问权限的解决方法
  16. 2021上海建筑施工八大员之安全员模拟题集及答案解析
  17. 优衣库推全新门店概念,背后意义何在?
  18. Android开发学习——记单词APP安卓注册登录跳转
  19. 国家发明专利:基于改进型黏菌优化算法的业务资源分配方法
  20. HTTP服务器响应状态信息

热门文章

  1. php和 sqlserver效率,SQLServer语句执行效率及性能测试
  2. LR12的log解释
  3. 两队选手每队5人进行一对一的比赛(算法)
  4. JVM经常使用的调优參数
  5. Maven和Gradle对比
  6. Cisco Easy ***综合配置示例
  7. GNS3与SecureCRT关联问题
  8. DV录像带导出一定要用1394
  9. mysql 基础篇(二) 账号、权限管理
  10. ADO.NET复习总结(5)--工具类SqlHelper 实现登录