• Android 图片的颜色处理


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

    项目布局如下:

    <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=".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) {
    
                }
            });
        }
    
    }

    运行效果:

  • 相关阅读:
    poj 3767 I Wanna Go Home (有限制的最短路)
    gcd及扩展gcd
    2012 多校联合比赛第二场
    大整数 问题
    从数据流动看数据结构
    vc/vs常用快捷键
    函数重载
    mysql相关
    xml理解
    编译相关
  • 原文地址:https://www.cnblogs.com/wuyudong/p/5847292.html
Copyright © 2020-2023  润新知