安卓菜鸟开发笔记(10-7)图片颜色变化
2016-05-18 16:59
375 查看
今天的进度是 写一个图片rgb颜色变化的小应用 废话不多说直接开始
首先完成一下页面的布局文件
drawable文件夹中的图片
Activity的编写
首先完成一下页面的布局文件
<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) { } }
相关文章推荐
- redis命中率计算
- BZOJ4436 [Cerc2015]Kernel Knights
- 504 Gateway time-out
- Nginx多Server反向代理配置
- 什么是缓存
- 使用google guava做内存缓存
- Qt 5.6.0 使用QML在某些情况下一构造WebView/WebEngineView就出错的一种解决办法
- 职场中如何处理与领导的关系
- Python2与Python3的区别(一):urllib和urllib2与urllib
- http://www.ablanxue.com/shtml/201411/25904_1.shtml
- 欢迎使用CSDN-markdown编辑器
- CSS布局口诀
- 学籍管理系统改宿舍管理系统
- PHP+MYSQL 出现乱码的解决方法
- Gps如何根据两点(经纬度)计算直线距离
- Python Tricks(六)—— 删除一个可迭代序列中等于某值的全部元素
- java队列的实现
- 读The How and Why of User Private Groups in Unix
- 编译 link
- V4l2 capture时 USERPTR和MMAP的区别