Android学习第三弹之Android图片颜色处理

时间:2022-04-26
本文章向大家介绍Android学习第三弹之Android图片颜色处理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Android之图片颜色处理

非著名程序员

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

处理之后:


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>

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

如果想要源码,请大家多多支持,分享到朋友圈,发送分享到朋友圈后的截屏和邮箱到此公众号,小编会争取第一时间把源码发送给您。