圖片顏色處理

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

運行效果如下所示:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章