您的位置:首页 > 移动开发 > Android开发

Android学习记录(10)—Android之图片颜色处理

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

效果图如下:

没处理前:



处理之后:



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>
到这里就完了,看明白了吗?

转载请注明出处:http://blog.csdn.net/loongggdroid/article/details/18708911
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: