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程序设计有所帮助。

以上是 Android开发中使用颜色矩阵改变图片颜色,透明度及亮度的方法 的全部内容, 来源链接: utcz.com/z/339946.html

回到顶部