1.相信大家都用过美图秀秀中如下的功能,调整颜色:

2. 下面通过案例说明Android中如何调色:

颜色矩阵 ColorMatrix cm = new ColorMatrix();

paint.setColorFilter(new ColorMatrixColorFilter(cm));

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

0 0 0 1 0

New Red Value = 1*128 + 0*128 + 0*128 + 0*0 + 0

New Blue Value = 0*128 + 1*128 + 0*128 + 0*0 + 0

New Green Value = 0*128 + 0*128 + 1*128 + 0*0 + 0

New Alpha Value = 0*128 + 0*128 + 0*128 + 1*0 + 0

(1)新建一个新的Android工程,如下:

(2)activity_main.xml,如下:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. tools:context="com.himi.xiuxiu.MainActivity" >
  7. <TextView
  8. android:layout_width="wrap_content"
  9. android:layout_height="wrap_content"
  10. android:text="青------------->红" />
  11. <SeekBar
  12. android:id="@+id/sb_red"
  13. android:max="255"
  14. android:progress="128"
  15. android:layout_width="match_parent"
  16. android:layout_height="wrap_content" />
  17. <TextView
  18. android:layout_width="wrap_content"
  19. android:layout_height="wrap_content"
  20. android:text="紫------------->绿" />
  21. <SeekBar
  22. android:max="255"
  23. android:progress="128"
  24. android:id="@+id/sb_green"
  25. android:layout_width="match_parent"
  26. android:layout_height="wrap_content" />
  27. <TextView
  28. android:layout_width="wrap_content"
  29. android:layout_height="wrap_content"
  30. android:text="黄------------->蓝" />
  31. <SeekBar
  32. android:max="255"
  33. android:progress="128"
  34. android:id="@+id/sb_blue"
  35. android:layout_width="match_parent"
  36. android:layout_height="wrap_content" />
  37. <ImageView
  38. android:layout_width="wrap_content"
  39. android:layout_height="wrap_content"
  40. android:id="@+id/iv"
  41. />
  42. </LinearLayout>

其中控件SeekBar的属性android:max表示进度条的最大值,android:progress表示进度条的起初开始默认进度值

布局效果如下:

(3)MainActivity,如下:

  1. package com.himi.xiuxiu;
  2. import android.app.Activity;
  3. import android.graphics.Bitmap;
  4. import android.graphics.BitmapFactory;
  5. import android.graphics.Canvas;
  6. import android.graphics.ColorMatrix;
  7. import android.graphics.ColorMatrixColorFilter;
  8. import android.graphics.Matrix;
  9. import android.graphics.Paint;
  10. import android.os.Bundle;
  11. import android.widget.ImageView;
  12. import android.widget.SeekBar;
  13. import android.widget.SeekBar.OnSeekBarChangeListener;
  14. public class MainActivity extends Activity implements OnSeekBarChangeListener {
  15. private SeekBar sb_red;
  16. private SeekBar sb_green;
  17. private SeekBar sb_blue;
  18. private ImageView iv;
  19. private Bitmap srcbitmap;
  20. private Bitmap alertbitmap;
  21. private Canvas canvas;
  22. private Paint paint;
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.activity_main);
  27. sb_red = (SeekBar) findViewById(R.id.sb_red);
  28. sb_green = (SeekBar) findViewById(R.id.sb_green);
  29. sb_blue = (SeekBar) findViewById(R.id.sb_blue);
  30. iv = (ImageView) findViewById(R.id.iv);
  31. //获得原图的位图
  32. srcbitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pre19);
  33. //获得原图的拷贝副本
  34. alertbitmap = Bitmap.createBitmap(srcbitmap.getWidth(), srcbitmap.getHeight(), srcbitmap.getConfig());
  35. //创建一个画布
  36. canvas = new Canvas(alertbitmap);
  37. //创建画笔
  38. paint = new Paint();
  39. ColorMatrix cm = new ColorMatrix();
  40. cm.set(new float[] {
  41. 1, 0, 0, 0, 0,
  42. 0, 1, 0, 0, 0,
  43. 0, 0, 1, 0, 0,
  44. 0, 0, 0, 1, 0
  45. });
  46. paint.setColorFilter(new ColorMatrixColorFilter(cm));
  47. canvas.drawBitmap(srcbitmap, new Matrix(), paint);
  48. iv.setImageBitmap(alertbitmap);
  49. sb_red.setOnSeekBarChangeListener(this);
  50. sb_green.setOnSeekBarChangeListener(this);
  51. sb_blue.setOnSeekBarChangeListener(this);
  52. }
  53. public void onProgressChanged(SeekBar seekBar, int progress,
  54. boolean fromUser) {
  55. // TODO 自动生成的方法存根
  56. }
  57. public void onStartTrackingTouch(SeekBar seekBar) {
  58. // TODO 自动生成的方法存根
  59. }
  60. // 停止滑动进度条,才设置颜色变化,节省内存
  61. public void onStopTrackingTouch(SeekBar seekBar) {
  62. float red=1;
  63. float green=1;
  64. float blue=1;
  65. switch (seekBar.getId()) {
  66. case R.id.sb_red:
  67. red = seekBar.getProgress()/128.0f;
  68. break;
  69. case R.id.sb_green:
  70. green = seekBar.getProgress()/128.0f;
  71. break;
  72. case R.id.sb_blue:
  73. blue = seekBar.getProgress()/128.0f;
  74. break;
  75. default:
  76. break;
  77. }
  78. ColorMatrix cm = new ColorMatrix();
  79. cm.set(new float[] { red, 0, 0, 0, 0,
  80. 0, green, 0, 0, 0,
  81. 0, 0, blue, 0, 0,
  82. 0, 0, 0, 1, 0 });
  83. paint.setColorFilter(new ColorMatrixColorFilter(cm));
  84. canvas.drawBitmap(srcbitmap, new Matrix(), paint);
  85. iv.setImageBitmap(alertbitmap);
  86. }
  87. }

运行结果如下:

Android(java)学习笔记240:多媒体之图形颜色的变化的更多相关文章

  1. Android(java)学习笔记183:多媒体之图形颜色的变化

    1.相信大家都用过美图秀秀中如下的功能,调整颜色: 2. 下面通过案例说明Android中如何调色: 颜色矩阵 ColorMatrix cm = new ColorMatrix(); paint.se ...

  2. java学习笔记(二)图形用户接口

    这个学期主要放在ACM比赛上去了,比赛结束了.不知不觉就15周了,这周就要java考试了,复习一下java吧.java的学习的目的还是让我们学以致用,让我们可以运用java开发一下小项目.而不是单单应 ...

  3. Android动画学习笔记-Android Animation

    Android动画学习笔记-Android Animation   3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...

  4. Android 数字签名学习笔记

    Android 数字签名学习笔记 在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的pro ...

  5. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  6. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  7. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

  8. Java学习笔记:语言基础

    Java学习笔记:语言基础 2014-1-31   最近开始学习Java,目的倒不在于想深入的掌握Java开发,而是想了解Java的基本语法,可以阅读Java源代码,从而拓展一些知识面.同时为学习An ...

  9. Java学习笔记4

    Java学习笔记4 1. JDK.JRE和JVM分别是什么,区别是什么? 答: ①.JDK 是整个Java的核心,包括了Java运行环境.Java工具和Java基础类库. ②.JRE(Java Run ...

随机推荐

  1. Aspnet MVC 异步调用

    一个简图来描述下Aspnet MVC下的异步调用 { request } / \/ -------ISS------- > work thread | \ | \ route - aysn co ...

  2. YII 小部件实现的注册表

    今天来进行用户注册功能yii集成了很多验证框架,framework/validators下面,这个文件夹的最后一个文件CValidator.php 是总的验证信息,根据请求参数决定需要那种验证 如:u ...

  3. [R]django的HTTPREQUEST对象

    django的HTTPREQUEST对象 via Django使用request和response对象 当请求一张页面时,Django把请求的metadata数据包装成一个HttpRequest对象, ...

  4. 一定要记住这20种PS技术!!!会让你的照片美的不行!!!

    一种简单的数码照片后期润饰 1 打开图片,执行色像/饱和度(-40)降低饱和度. 2 新建一图层,将图层模式改为柔光,用画笔工具将需要润饰的部分画几下,这里可以利用色板方便的提取颜色 3 图片色彩过渡 ...

  5. Unity问答——请教一下NGUI的图片转换问题

    这篇博客源自我在泰课在线的回答.链接:http://www.taikr.com/group/1/thread/92 问:请教一下NGUI的图片转换问题 1.NGUI能不能把导入的方形图片转成圆形的(因 ...

  6. PKU 1064 Cable master

    题目链接:点击打开链接 有n段绳子,给定n段绳子的长度,单位为厘米.求能够把这些绳子分成k段的最长的段的长度.题目中的trick是最小是1cm,长度不能小于1cm,因此要转换成int来解,然后二分可以 ...

  7. C++ Primer 随笔 Chapter 9 顺序容器

     参考:http://www.cnblogs.com/kurtwang/archive/2010/08/19/1802912.html 1..顺序容器:vector(快速随机访问):list(快速插入 ...

  8. Qt入门(19)——自定义窗口部件

    我们介绍可以画自己的第一个自定义窗口部件.我们也加入了一个有用的键盘接口.我们添加了一个槽:setRange().        void setRange( int minVal, int maxV ...

  9. 【宽搜】ECNA 2015 D Rings (Codeforces GYM 100825)

    题目链接: http://codeforces.com/gym/100825 题目大意: 给你一张N*N(N<=100)的图表示一个树桩,'T'为年轮,'.'为空,求每个'T'属于哪一圈年轮,空 ...

  10. 高效算法——M 扫描法

    In an open credit system, the students can choose any course they like, but there is a problem. Some ...