你的位置:首页 > 操作系统

[操作系统]Android 图片的颜色处理


仿造美图秀秀移动鼠标调整seekbar,调整图片的颜色

项目布局如下:

<LinearLayout ="http://schemas.android.com/apk/res/android"  ="http://schemas.android.com/tools"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:orientation="vertical"  tools:context=".MainActivity" >  <SeekBar    android:id="@+id/sb1"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:max="255" />  <SeekBar    android:id="@+id/sb2"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:max="255" />  <SeekBar    android:id="@+id/sb3"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:max="255" />  <ImageView    android:id="@+id/iv"    android:layout_width="wrap_content"    android:layout_height="wrap_content" /></LinearLayout>

效果如下:

逻辑部分代码如下:

package com.wuyudong.resize;import android.os.Bundle;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.view.Menu;import android.widget.ImageView;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;public class MainActivity extends Activity {  private ImageView iv1;  private SeekBar sb1, sb2, sb3;    private Bitmap alterBitmap;  private Canvas canvas;  private Paint paint;  @Override  protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    iv1 = (ImageView) findViewById(R.id.iv);    // 设置第一个bitmap的图标    final Bitmap bitmap1 = BitmapFactory.decodeResource(getResources(),        R.drawable.ic_launcher);    // 新建一个bitmap    alterBitmap = Bitmap.createBitmap(bitmap1.getWidth(),        bitmap1.getHeight(), bitmap1.getConfig());    // 以alterBitmap为模板新建画布    canvas = new Canvas(alterBitmap);    // 新建画笔并设置属性    paint = new Paint();    paint.setColor(Color.BLACK);    // 新建矩阵    final Matrix matrix = new Matrix();    // 指定颜色矩阵    final ColorMatrix cm = new ColorMatrix();        /**     * Set this colormatrix to identity:     * [ 1 0 0 0 0  - red vector     *  0 1 0 0 0  - green vector     *  0 0 1 0 0  - blue vector     *  0 0 0 1 0 ] - alpha vector     */    paint.setColorFilter(new ColorMatrixColorFilter(cm));    paint.setAntiAlias(true);    // 设置画布    canvas.drawBitmap(bitmap1, matrix, paint);    iv1.setImageBitmap(alterBitmap);    sb1 = (SeekBar) findViewById(R.id.sb1);    sb2 = (SeekBar) findViewById(R.id.sb2);    sb3 = (SeekBar) findViewById(R.id.sb3);    sb1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {      @Override      public void onStopTrackingTouch(SeekBar seekBar) {        int progress = seekBar.getProgress();        cm.set(new float[]{            progress/128.0f, 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(bitmap1, matrix, paint);        iv1.setImageBitmap(alterBitmap);      }      @Override      public void onStartTrackingTouch(SeekBar seekBar) {      }      @Override      public void onProgressChanged(SeekBar seekBar, int progress,          boolean fromUser) {      }    });    sb2.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {      @Override      public void onStopTrackingTouch(SeekBar seekBar) {        int progress = seekBar.getProgress();        cm.set(new float[]{            progress/128.0f, 0, 0, 0, 0,            0, 1, 0, 0, 0,            0, 0, progress/128.0f, 0, 0,            0, 0, 0, 1, 0,        });        paint.setColorFilter(new ColorMatrixColorFilter(cm));        canvas.drawBitmap(bitmap1, matrix, paint);        iv1.setImageBitmap(alterBitmap);      }      @Override      public void onStartTrackingTouch(SeekBar seekBar) {      }      @Override      public void onProgressChanged(SeekBar seekBar, int progress,          boolean fromUser) {      }    });    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/128.0f, 0, 0,            0, 0, 0, 1, 0,        });        paint.setColorFilter(new ColorMatrixColorFilter(cm));        canvas.drawBitmap(bitmap1, matrix, paint);        iv1.setImageBitmap(alterBitmap);      }      @Override      public void onStartTrackingTouch(SeekBar seekBar) {      }      @Override      public void onProgressChanged(SeekBar seekBar, int progress,          boolean fromUser) {      }    });  }}

运行效果: