您的位置:首页 > 其它

安卓菜鸟开发笔记(10-7)图片颜色变化

2016-05-18 16:59 375 查看
今天的进度是 写一个图片rgb颜色变化的小应用 废话不多说直接开始 
首先完成一下页面的布局文件

<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.example.szh.day10.ColorChange">

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="青--->红"
android:layout_gravity="center"
/>
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBarRed"
android:max="255"
android:progress="128"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="紫--->绿"
android:layout_gravity="center"
/>

<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="255"
android:progress="128"
android:id="@+id/seekBarGreen" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="黄--->蓝"
android:layout_gravity="center"
/>
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBarBlue"
android:max="255"
android:progress="128"/>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/k"
android:id="@+id/iv"
/>
</LinearLayout>


drawable文件夹中的图片

Activity的编写

package com.example.szh.day10;

import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;
import android.widget.SeekBar;

public class ColorChange extends ActionBarActivity implements SeekBar.OnSeekBarChangeListener {

private SeekBar seekBarRed;
private SeekBar seekBarGreen;
private SeekBar seekBarBlue;
private Bitmap originalPicture;
private Bitmap alterBitmap;//创建一个原图的拷贝对象
private Canvas canvas;//创建一个画板对象
private Paint paint;//创建一个画笔对象
private ImageView iv;
private float red =1;
private float greened =1;
private float blue =1;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_color_change);
//找到布局文件中的组件
seekBarRed = (SeekBar) findViewById(R.id.seekBarRed);
seekBarGreen = (SeekBar) findViewById(R.id.seekBarGreen);
seekBarBlue = (SeekBar) findViewById(R.id.seekBarBlue);
iv = (ImageView) findViewById(R.id.iv);

//不能对原图进行操作 要创建一个原图的拷贝对象
//首先获取原图 创建原图对象
originalPicture = BitmapFactory.decodeResource(getResources(), R.drawable.k);
//创建拷贝的对象 createBitmap()该方法里面的三个参数分别为 原图的宽度 原图的高度 原图的类型
alterBitmap =  Bitmap.createBitmap(originalPicture.getWidth(), originalPicture.getHeight(), originalPicture.getConfig());
//以拷贝图片为参照 创建一个大小和拷贝图片一样的画板
canvas = new Canvas(alterBitmap);
//创建一个画笔对象
paint = new Paint();
//初始化画笔颜色  画笔可以更改临摹图片的颜色
paint.setColor(Color.BLACK);
/*
* 1,0,0,0,0 红色
* 0,1,0,0,0 绿色
* 0,0,1,0,0 蓝色
* 0,0,1,0,0 透明度
*矩阵是控制rgb(红色、绿色、蓝色)跟透明度
* 这个贴上有比较详细的颜色矩阵ColorMatrix的介绍
* http://blog.csdn.net/sjf0115/article/details/8698619 * */
//创建颜色矩阵
ColorMatrix cm = new ColorMa
4000
trix();
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(originalPicture,new Matrix(),paint);//alterBitmap对象就会被更新成画完的图片
//把图片设置到ImageView组件中去
iv.setImageBitmap(alterBitmap);

//为三个SeekBar创建事件
seekBarRed.setOnSeekBarChangeListener(this);
seekBarGreen.setOnSeekBarChangeListener(this);
seekBarBlue.setOnSeekBarChangeListener(this);
}

//滑动数值改变调用的方法
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
switch (seekBar.getId()){
case R.id.seekBarRed:
red = seekBar.getProgress()/128.0f;
break;
case  R.id.seekBarGreen:
greened = seekBar.getProgress()/128.0f;
break;
case R.id.seekBarBlue:
blue = seekBar.getProgress()/128.0f;
break;
}
//创建颜色矩阵
ColorMatrix cm = new ColorMatrix();
cm.set(new float[]{
red,0,0,0,0,
0,greened,0,0,0,
0,0,blue,0,0,
0,0,0,1,0,
});
paint.setColorFilter(new ColorMatrixColorFilter(cm));//把新的颜色修改到原来的图片
//开始画  参数分别为 原图对象 图形矩阵对象(这里可以理解为按照原图像素大小 一比一去画) 画笔对象
canvas.drawBitmap(originalPicture,new Matrix(),paint);//alterBitmap对象就会被更新成画完的图片
//把图片设置到ImageView组件中去
iv.setImageBitmap(alterBitmap);
}
//开始滑动调用的方法
@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}
//停止滑动调用的方法
@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: