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

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

本文实例讲述了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

标签:Android,图片
0
投稿

猜你喜欢

  • 使用纯Java实现一个WebSSH项目的示例代码

    2023-03-11 11:32:20
  • java开发就业信息管理系统

    2022-06-19 02:09:30
  • 为什么rest接口返回json建议采用下划线形式,不要用驼峰

    2023-06-24 23:23:16
  • JPA配置方式+逆向工程映射到Entity实体类

    2023-07-28 12:09:48
  • 流读取导致StringBuilder.toString()乱码的问题及解决

    2022-12-20 13:34:14
  • Android开发中Activity创建跳转及传值的方法

    2021-06-11 19:13:35
  • Android scheme 跳转的设计与实现详解

    2021-07-29 03:42:52
  • MultipartResolver实现文件上传功能

    2021-06-19 22:38:15
  • JAVA 根据设置的概率生成随机数的方法

    2023-07-15 00:13:37
  • ionic监听android返回键实现“再按一次退出”功能

    2021-12-24 10:22:57
  • Java计时器StopWatch实现方法代码实例

    2021-07-25 13:43:42
  • 详解微信开发之access_token之坑

    2022-09-04 16:49:30
  • response对象的使用(实例讲解)

    2023-11-30 12:23:22
  • Unity3d获取系统时间

    2023-10-20 00:28:56
  • 深入了解Java中String、Char和Int之间的相互转换

    2022-09-14 10:18:54
  • Spring2.5.6开发环境搭建图文教程

    2023-07-28 18:01:02
  • Spring Batch批处理框架使用解析

    2021-12-24 03:41:19
  • JAVA内部类示例详解及练习

    2023-04-05 06:42:39
  • Java实现的校验银行卡功能示例

    2022-01-28 19:33:53
  • Android去除AlertDialog的按钮栏的分隔线

    2021-06-06 18:53:54
  • asp之家 软件编程 m.aspxhome.com