图片颜色处理

本文介绍如何在Android中利用ColorMatrixColorFilter进行颜色处理。通过4*5的颜色矩阵,可以改变图片的颜色信息,实现丰富的视觉效果。示例代码展示了具体的实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android提供了强大的颜色过滤器来进行颜色处理,ColorMetrixColorFilter通过一个4*5的矩阵来创建颜色过滤器,从而改变图片的信息。

{1,0,0,0,0,  //red  1*R + 0*G + 0*B + 0*A + 0
 0,1,0,0,0,  //green  0*R + 1*G + 0*B + 0*A + 0
 0,0,1,0,0,  //blue   0*R + 0*G + 1*B + 0*A + 0
 0,0,0,1,0 }  //alpha   0*R + 0*G + 0*B + 1*A + 0
颜色矩阵的每一行的最后一个值更改时,其对于的颜色就会发生改变。因此更改颜色只需修改对应颜色矩阵的最后一个值,最大范围是255.

下面是一个简单的示例:
布局文件是一个垂直的LinerLayout加了四个水平的LinerLayout,此处省略。
java文件如下:

public class MainActivity extends AppCompatActivity implements SeekBar.OnSeekBarChangeListener {
    private ImageView imageView;
    private String name = "example.jpg";
    private SeekBar sbRed;
    private SeekBar sbGreen;
    private SeekBar sbBlue;
    private SeekBar sbRgb;
    private float [] arrays = new float[]{
          1,0,0,0,0,
          0,1,0,0,0,
          0,0,1,0,0,
          0,0,0,1,0
    };
    private ColorFilter colorFilter = new ColorMatrixColorFilter(arrays);  //申明颜色过滤器    
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       imageView = findViewById(R.id.imageView);
       sbRed = findViewById(R.id.sb_red);
       sbGreen = findViewById(R.id.sb_green);
       sbBlue = findViewById(R.id.sb_blue);
       sbRgb = findViewById(R.id.sb_rgb);
       sbRed.setOnSeekBarChangeListener(this);
       sbGreen.setOnSeekBarChangeListener(this);
       sbBlue.setOnSeekBarChangeListener(this);
       sbRed.setOnSeekBarChangeListener(this);   
       }       
        
   @Override
   public void onProgressChanged(SeekBar seekBar, int i, boolean b) {
      int id = seekBar.getId();
      switch (id){
         case R.id.sb_red:
              arrays[4]= i;
              break;
         case R.id.sb_green:
              arrays[9] = i;
              break;
        case R.id.sb_blue:
              arrays[14] = i;
              break;
        case R.id.sb_rgb:
              arrays[4]=arrays[9]=arrays[14]=i;
              break;
        default:
              break;
     }
     colorFilter = new ColorMatrixColorFilter(arrays);
     imageView.setColorFilter(colorFilter); 
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}

运行效果如下所示:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值