软件编程
位置:首页>> 软件编程>> Android编程>> Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法

Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法

作者:CharlinGod  发布时间:2023-04-28 20:42:22 

标签:Android,图片

本文实例讲述了Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法。分享给大家供大家参考,具体如下:

一、如图

Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法

二、代码实现


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);
 }
}
}

希望本文所述对大家Android程序设计有所帮助。

来源:http://blog.csdn.net/lovoo/article/details/51298968

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com