当前位置:首页 > Android > 正文内容

Android图片颜色处理

jsc9年前 (2016-09-23)Android6109

你想做到跟美图秀秀一样可以处理自己的照片,美化自己的照片吗?其实你也可以自己做一个这样的软件,废话不多说了,直接上图,上代码了!

效果图如下:

没处理前:

1.png

处理之后:

2.png

MainActivity.java的代码如下:

package net.loonggg.test;
import android.app.Activity;
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.os.Bundle;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
public class MainActivity extends Activity {
	private SeekBar sb1, sb2, sb3, sb4, sb5;
	private ImageView iv;
	private Bitmap bitmap, updateBitmap;
	private Canvas canvas;
	private Paint paint;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		iv = (ImageView) findViewById(R.id.iv);
		sb1 = (SeekBar) findViewById(R.id.sb1);
		sb2 = (SeekBar) findViewById(R.id.sb2);
		sb3 = (SeekBar) findViewById(R.id.sb3);
		sb4 = (SeekBar) findViewById(R.id.sb4);
		sb5 = (SeekBar) findViewById(R.id.sb5);
		bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.b);
		updateBitmap = Bitmap.createBitmap(bitmap.getWidth(),
				bitmap.getHeight(), bitmap.getConfig());
		canvas = new Canvas(updateBitmap);
		paint = new Paint();
		final ColorMatrix cm = new ColorMatrix();
		paint.setColorFilter(new ColorMatrixColorFilter(cm));
		paint.setColor(Color.BLACK);
		paint.setAntiAlias(true);
		final Matrix matrix = new Matrix();
		canvas.drawBitmap(bitmap, matrix, paint);
		iv.setImageBitmap(updateBitmap);
		/**
		 * RGB三原色 红色值的设置
		 */
		sb1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
				int progress = seekBar.getProgress();
				cm.set(new float[] { progress / 128f, 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(bitmap, matrix, paint);
				iv.setImageBitmap(updateBitmap);
			}
			@Override
			public void onStartTrackingTouch(SeekBar seekBar) {
			}
			@Override
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
			}
		});
		/**
		 * RGB三原色 绿色值的设置
		 */
		sb2.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
				int progress = seekBar.getProgress();
				cm.set(new float[] { 1, 0, 0, 0, 0,// 红色值
						0, progress / 128f, 0, 0, 0,// 绿色值
						0, 0, 1, 0, 0,// 蓝色值
						0, 0, 0, 1, 0 // 透明度
				});
				paint.setColorFilter(new ColorMatrixColorFilter(cm));
				canvas.drawBitmap(bitmap, matrix, paint);
				iv.setImageBitmap(updateBitmap);
			}
			@Override
			public void onStartTrackingTouch(SeekBar seekBar) {
			}
			@Override
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
			}
		});
		/**
		 * RGB三原色 蓝色值的设置
		 */
		sb3.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
				int progress = seekBar.getProgress();
				cm.set(new float[] { 1, 0, 0, 0, 0,// 红色值
						0, 1, 0, 0, 0,// 绿色值
						0, 0, progress / 128f, 0, 0,// 蓝色值
						0, 0, 0, 1, 0 // 透明度
				});
				paint.setColorFilter(new ColorMatrixColorFilter(cm));
				canvas.drawBitmap(bitmap, matrix, paint);
				iv.setImageBitmap(updateBitmap);
			}
			@Override
			public void onStartTrackingTouch(SeekBar seekBar) {
			}
			@Override
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
			}
		});
		/**
		 * RGB三原色 三个值都改变为设置饱和度(亮度)
		 */
		sb4.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
				int progress = seekBar.getProgress();
				cm.set(new float[] { progress / 128f, 0, 0, 0, 0,// 红色值
						0, progress / 128f, 0, 0, 0,// 绿色值
						0, 0, progress / 128f, 0, 0,// 蓝色值
						0, 0, 0, 1, 0 // 透明度
				});
				paint.setColorFilter(new ColorMatrixColorFilter(cm));
				canvas.drawBitmap(bitmap, matrix, paint);
				iv.setImageBitmap(updateBitmap);
			}
			@Override
			public void onStartTrackingTouch(SeekBar seekBar) {
			}
			@Override
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
			}
		});
		/**
		 * RGB三原色 设置透明度
		 */
		sb5.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
			@Override
			public void onStopTrackingTouch(SeekBar seekBar) {
				int progress = seekBar.getProgress();
				cm.set(new float[] { 1, 0, 0, 0, 0,// 红色值
						0, 1, 0, 0, 0,// 绿色值
						0, 0, 1, 0, 0,// 蓝色值
						0, 0, 0, progress / 128f, 0 // 透明度
				});
				paint.setColorFilter(new ColorMatrixColorFilter(cm));
				canvas.drawBitmap(bitmap, matrix, paint);
				iv.setImageBitmap(updateBitmap);
			}
			@Override
			public void onStartTrackingTouch(SeekBar seekBar) {
			}
			@Override
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
			}
		});
	}
}

布局代码如下:

<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:background="#CDCDCD"
android:orientation="vertical"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/iv"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="10dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="红色:"
android:textColor="#FF0000"
android:textSize="24sp" />
<SeekBar
android:id="@+id/sb1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="256"
android:progress="128" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="10dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="绿色:"
android:textColor="#00FF00"
android:textSize="24sp" />
<SeekBar
android:id="@+id/sb2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="256"
android:progress="128" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="10dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="蓝色:"
android:textColor="#0000FF"
android:textSize="24sp" />
<SeekBar
android:id="@+id/sb3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="256"
android:progress="128" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="10dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="饱和度:"
android:textColor="#000000"
android:textSize="16.5sp" />
<SeekBar
android:id="@+id/sb4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="256"
android:progress="128" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="10dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="透明度:"
android:textColor="#000000"
android:textSize="16.5sp" />
<SeekBar
android:id="@+id/sb5"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="256"
android:progress="128" />
</LinearLayout>
</LinearLayout>

到这里就完了,看明白了吗?

扫描二维码推送至手机访问。

版权声明:本文由微小站发布,如需转载请注明出处。

本文链接:https://jsc0.com/post/141.html

分享给朋友:

“Android图片颜色处理” 的相关文章

Android Location在GPS中的应用(一)

Android Location在GPS中的应用(一)

新建AndroidProject,注意选择Google APIs:  打开AndroidManifest.xml,在其中加入GPS使用权限: <uses-permission android:name="android.permission.ACCESS_COARSE_LO...

TypedArray和obtainStyledAttributes使用

TypedArray和obtainStyledAttributes使用

在编写Android自定义按钮示例基础上,如果要指定字体大小产生这样的效果: 其实是不需要自定义变量的,可以直接使用TextView的配置属性: <com.easymorse.textbutton.TextButto...

java.util.Properties类

java.util.Properties类

一、认识properties文件   1、properties文件是一个文本文件 2、properties文件的语法有两种,一种是注释,一种属性配置。  注    释...

Android权限问题整理

Android权限系统非常庞大,我们在Android系统中做任何操作都需要首先获取Android系统权限,本文记录了所有的Android权限问题,整理一下分享给大家。访问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES读取或写入登记check-in数...

google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

    了解二维码这个东西还是从微信中,当时微信推出二维码扫描功能,自己感觉挺新颖的,从一张图片中扫一下竟然能直接加好友,不可思议啊,那时候还不了解二维码,呵呵,然后做项目的时候,老板说要加上二维码扫描功能,然后自己的屁颠屁颠的去百度,google...

实现应用程序只有在第一次启动时显示引导界面

第一次安装启动:启动页--->导航页-->主页面之后启动:启动页-->主页面实现的原理就是:在启动页面用做一个文件保存的状态,保存程序是不是第一次启动的状态。因为只是要保存一个状态,我们将这个程序是第一次打开就将他设为true,当他进入 主页面之后将他的状态未为false,因为都...