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,如下:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.himi.xiuxiu.MainActivity" > <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="青------------->红" /> <SeekBar
android:id="@+id/sb_red"
android:max="255"
android:progress="128"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="紫------------->绿" /> <SeekBar
android:max="255"
android:progress="128"
android:id="@+id/sb_green"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="黄------------->蓝" /> <SeekBar
android:max="255"
android:progress="128"
android:id="@+id/sb_blue"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/iv"
/> </LinearLayout>

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

布局效果如下:

(3)MainActivity,如下:

 package com.himi.xiuxiu;

 import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener; public class MainActivity extends Activity implements OnSeekBarChangeListener {
private SeekBar sb_red;
private SeekBar sb_green;
private SeekBar sb_blue;
private ImageView iv; private Bitmap srcbitmap;
private Bitmap alertbitmap;
private Canvas canvas;
private Paint paint;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sb_red = (SeekBar) findViewById(R.id.sb_red);
sb_green = (SeekBar) findViewById(R.id.sb_green);
sb_blue = (SeekBar) findViewById(R.id.sb_blue);
iv = (ImageView) findViewById(R.id.iv);
//获得原图的位图
srcbitmap = BitmapFactory.decodeResource(getResources(), R.drawable.pre19);
//获得原图的拷贝副本
alertbitmap = Bitmap.createBitmap(srcbitmap.getWidth(), srcbitmap.getHeight(), srcbitmap.getConfig());
//创建一个画布
canvas = new Canvas(alertbitmap);
//创建画笔
paint = new Paint(); ColorMatrix cm = new ColorMatrix();
cm.set(new float[] {
1, 0, 0, 0, 0,
0, 1, 0, 0, 0,
0, 0, 1, 0, 0,
0, 0, 0, 1, 0
}); paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(srcbitmap, new Matrix(), paint);
iv.setImageBitmap(alertbitmap); sb_red.setOnSeekBarChangeListener(this);
sb_green.setOnSeekBarChangeListener(this);
sb_blue.setOnSeekBarChangeListener(this); }
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO 自动生成的方法存根 }
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO 自动生成的方法存根 }
// 停止滑动进度条,才设置颜色变化,节省内存
public void onStopTrackingTouch(SeekBar seekBar) {
float red=1;
float green=1;
float blue=1;
switch (seekBar.getId()) {
case R.id.sb_red:
red = seekBar.getProgress()/128.0f;
break;
case R.id.sb_green:
green = seekBar.getProgress()/128.0f;
break;
case R.id.sb_blue:
blue = seekBar.getProgress()/128.0f;
break; default:
break;
}
ColorMatrix cm = new ColorMatrix();
cm.set(new float[] { red, 0, 0, 0, 0,
0, green, 0, 0, 0,
0, 0, blue, 0, 0,
0, 0, 0, 1, 0 }); paint.setColorFilter(new ColorMatrixColorFilter(cm));
canvas.drawBitmap(srcbitmap, new Matrix(), paint);
iv.setImageBitmap(alertbitmap);
} }

运行结果如下:

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

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

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

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

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

  3. Android 数字签名学习笔记

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

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

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

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

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

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

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

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

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

  8. Java学习笔记4

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

  9. 【Java学习笔记之二十六】深入理解Java匿名内部类

    在[Java学习笔记之二十五]初步认知Java内部类中对匿名内部类做了一个简单的介绍,但是内部类还存在很多其他细节问题,所以就衍生出这篇博客.在这篇博客中你可以了解到匿名内部类的使用.匿名内部类要注意 ...

随机推荐

  1. NOIP2009 靶型数独

    传送门 这道题比我想象之中要暴力一些. 自己一开始有一份写9*9数独的代码,自己试了一下直接交上去只有40分.看来这样是肯定不行的.考虑优化,想在中间贪贪心啥的,但是难以保证正确性.最后学了一招,从数 ...

  2. 【前端】CentOS 7 系列教程之六: 安装 mysql 5.7

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/linux_6.html 进入/usr/local/src目录 cd /usr/local/src 下载mysql的 ...

  3. AES加密算法(C++实现,附源码)

    原创作品,转载请注明出自xelz's blog 博客地址:http://mingcn.cnblogs.com/ 本文地址:http://mingcn.cnblogs.com/archive/2010/ ...

  4. 02_使用httpurlconnection提交参数_get

  5. hadoop推荐

    hadoop官网 我以Hadoop 2.7.3为例. hadoop 2.7.3 官网  . 用的操作系统是64bit Ubuntu14.04. 其中我们还可以学习 Apache Maven Proje ...

  6. 2.25-2.26 MapReduce执行流程Shuffle讲解

    原文链接:https://langyu.iteye.com/blog/992916 Shuffle过程是MapReduce的核心,也被称为奇迹发生的地方.要想理解MapReduce, Shuffle是 ...

  7. C++开发工程师面试题库 50~100道

    51. New delete 与malloc free 的联系与区别?答案:都是在堆(heap)上进行动态的内存操作.用malloc函数需要指定内存分配的字节数并且不能初始化对象,new 会自动调用对 ...

  8. 51nod 1133【贪心】

    思路: 按照终点升序,然后遍历一下就好了: #include <bits/stdc++.h> using namespace std; typedef long long LL; cons ...

  9. 序列/树上差分小结 By cellur925

    首先我们需要注意一下的是,差分比较适用于修改比较多而查询比较少的情况. 一.序列上差分 借教室  这是一道二分答案,在check函数中用到差分技巧的一道题,譬如说我们要把一个序列中[l,r]区间都加上 ...

  10. 决斗(Headshot )

    #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; char ...