3

我正在改變ImageView的亮度,對比度,飽和度和色調。我已經搜尋了很多。合併兩個ColorMatrix或在Imageview上同時應用兩個或多個ColorMatrix

我得到了一些與ColorMatrix一起使用的代碼。

[1]對於亮度嘉洛斯是某些東西一樣

float brightness = (-50F * 1.5F); 
    ColorMatrix cmB = new ColorMatrix(); 
    cmB.set(new float[] { 1, 0, 0, 0, brightness, 
    0, 1, 0, 0,brightness, 
    0, 0, 1, 0, brightness, 
    0, 0, 0, 1, 0 }); 
    myImageView.setColorFilter(new ColorMatrixColorFilter(cmB)); 

其正常工作。

[2]對於對比度嘉洛斯是什麼不同,這也正常工作。

但是,所有這些ColorMatrix分別工作。意味着上次應用ColorMatrix的效果只是ImageView上的場景,因爲它完全是它的作用,其中消除了先前應用的效果 ColorMatrix,最後的設置適用於ColorMatrix。

現在我想MERGE或混合ColorMatrix的所有同時。意味着要將對比度的ColorMatrix應用於Brightnrs/Saturation/Hue的ColorMatrix的效果。

回答

2

如果你想應用兩個顏色矩陣,只需將它們相乘即可。

如果你有彩色矩陣A,和彩色矩陣B,則:

C = B * A; 
outpixel = C * inpixel 

相當於

outpixel = B * A * inpixel 

編輯

我只注意到那些是5x4的矩陣(原我以爲他們是4x4)。既然你不能直接乘它們,我認爲在乘以(使它們都成爲5x5)之前在兩個矩陣中添加第5個標識行(0,0,0,0,1)是合適的,並且在第5行之後丟棄第5行乘法。

0

可以將多個矩陣這樣的:

ColorMatrix colorFilterMatrix = new ColorMatrix(); 
colorFilterMatrix.postConcat(getContrastMatrix(contrast)); 
colorFilterMatrix.postConcat(getBrightnessMatrix(brightness)); 

imageView.setColorFilter(new ColorMatrixColorFilter(colorFilterMatrix));