您的位置:首页 > 移动开发 > Android开发

Android 使用颜色矩阵改变图片颜色,透明度,亮度

2016-05-02 23:08 483 查看
一、如图



二、代码实现

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);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: