一、如图
Android 使用颜色矩阵改变图片颜色,透明度,亮度_第1张图片
二、代码实现

public class ColorImageActivity extends Activity {    private ImageView mImageView;    private SeekBar mSBRed,mSBGreen,mSBBlue,mSBAlpha,mSBLight;    //修改后的图片    private Bitmap mModBitmap;    //画布    private Canvas mCanvas;    //画笔    private Paint mPaint;    //颜色矩阵    private ColorMatrix mColorMatrix;    //图片矩阵    private Matrix mMatrix;    //原图    private Bitmap mBitmap;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_image_color);        initViews();    }    private void initViews() {        mImageView = (ImageView) findViewById(R.id.imageView1);        mSBRed = (SeekBar) findViewById(R.id.seekBar1);        mSBGreen = (SeekBar) findViewById(R.id.seekBar2);        mSBBlue = (SeekBar) findViewById(R.id.seekBar3);        mSBAlpha = (SeekBar) findViewById(R.id.seekBar4);        mSBLight = (SeekBar) findViewById(R.id.seekBar5);        mSBRed.setOnSeekBarChangeListener(new RedChangeListener());        mSBGreen.setOnSeekBarChangeListener(new GreenChangeListener());        mSBBlue.setOnSeekBarChangeListener(new BlueChangeListener());        mSBAlpha.setOnSeekBarChangeListener(new AlphaChangeListener());        mSBLight.setOnSeekBarChangeListener(new LightChangeListener());        //创建原图        mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.mm0);        //创建修改的图        mModBitmap = Bitmap.createBitmap(mBitmap.getWidth()+20, mBitmap.getHeight()+20, mBitmap.getConfig());        mCanvas = new Canvas(mModBitmap);        mPaint = new Paint();        mPaint.setColor(Color.BLACK);        mPaint.setAntiAlias(true);        mMatrix = new Matrix();        mColorMatrix = new ColorMatrix();        mPaint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));        //绘制原图        mCanvas.drawBitmap(mBitmap, mMatrix, mPaint);        mImageView.setImageBitmap(mModBitmap);    }    private class RedChangeListener implements OnSeekBarChangeListener{        @Override        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {        }        @Override        public void onStartTrackingTouch(SeekBar seekBar) {        }        @Override        public void onStopTrackingTouch(SeekBar seekBar) {            int progess = seekBar.getProgress();            mColorMatrix.set(new float[]{                    progess /128.0f,0,0,0,0,                    0,1,0,0,0,                    0,0,1,0,0,                    0,0,0,1,0,            });            mPaint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));            mCanvas.drawBitmap(mBitmap, mMatrix, mPaint);            mImageView.setImageBitmap(mBitmap);        }    }    private class GreenChangeListener implements OnSeekBarChangeListener{        @Override        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {        }        @Override        public void onStartTrackingTouch(SeekBar seekBar) {        }        @Override        public void onStopTrackingTouch(SeekBar seekBar) {            int progess = seekBar.getProgress();            mColorMatrix.set(new float[]{                    1,0,0,0,0,                    0,progess/128.0f,0,0,0,                    0,0,1,0,0,                    0,0,0,1,0,            });            mPaint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));            mCanvas.drawBitmap(mBitmap, mMatrix, mPaint);            mImageView.setImageBitmap(mModBitmap);        }    }    private class BlueChangeListener implements OnSeekBarChangeListener{        @Override        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {        }        @Override        public void onStartTrackingTouch(SeekBar seekBar) {        }        @Override        public void onStopTrackingTouch(SeekBar seekBar) {            int progess = seekBar.getProgress();            mColorMatrix.set(new float[]{                    1,0,0,0,0,                    0,1,0,0,0,                    0,0,progess/128.0f,0,0,                    0,0,0,1,0,            });            mPaint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));            mCanvas.drawBitmap(mBitmap, mMatrix, mPaint);            mImageView.setImageBitmap(mModBitmap);        }    }    private class AlphaChangeListener implements OnSeekBarChangeListener{        @Override        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {        }        @Override        public void onStartTrackingTouch(SeekBar seekBar) {        }        @Override        public void onStopTrackingTouch(SeekBar seekBar) {            int progess = seekBar.getProgress();            mColorMatrix.set(new float[]{                    1,0,0,0,0,                    0,1,0,0,0,                    0,0,1,0,0,                    0,0,0,progess/50.0f,0,            });            mPaint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));            mCanvas.drawBitmap(mBitmap, mMatrix, mPaint);            mImageView.setImageBitmap(mModBitmap);        }    }    //更改亮度    private class LightChangeListener implements OnSeekBarChangeListener{        @Override        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {        }        @Override        public void onStartTrackingTouch(SeekBar seekBar) {        }        @Override        public void onStopTrackingTouch(SeekBar seekBar) {            int progess = seekBar.getProgress();            mColorMatrix.set(new float[]{                    progess/128.0f,0,0,0,0,                    0,progess/128.0f,0,0,0,                    0,0,progess/128.0f,0,0,                    0,0,0,1,0,            });            mPaint.setColorFilter(new ColorMatrixColorFilter(mColorMatrix));            mCanvas.drawBitmap(mBitmap, mMatrix, mPaint);            mImageView.setImageBitmap(mModBitmap);        }    }}

更多相关文章

  1. 图片旋转的两种方法
  2. android 显示gif格式的图片
  3. 详细讲解Android的图片下载框架UniversialImageLoader之磁盘缓存
  4. OOM的出现及解决(加载图片)
  5. 【Android 开发】:UI控件之 ImageView 实现适屏和裁剪图片的功能
  6. Android底下多线程下载远程图片
  7. Android APP内存优化之图片优化
  8. Android 使用Glide4.9 压缩并保存图片(jpg/png/gif)到本地
  9. Android中ListView使用- 网络图片的异步加载

随机推荐

  1. Android常用Layout源码总结—FrameLayout
  2. AndroidX终极迁移指南
  3. 全球开发者:iOS、Android、WP哪个最赚钱?
  4. Android图片资源的缩放问题
  5. 简单处理Android(安卓)65536方法越界问题
  6. Android 利用addView 动态给Activity添加
  7. Android -- AppWidget 高级篇
  8. Android studio 分配内存设置方法
  9. 页面调用ADB操作Android设备
  10. Android Binder 全解析(3) -- AIDL原理剖