可以通过增加或减少颜色值来调整图像的亮度和对比度。
以下代码将对每个颜色通道的强度加倍,其将影响到图像的亮度和对比度
1 ColorMatrix cm=new ColorMatrix(); 2 float contrast=2; 3 cm.set(new float[]{ 4 contrast,0,0,0,0, 5 0,contrast,0,0,0, 6 0,0,contrast,0,0, 7 0,0,0,1,0 8 }); 9 paint.setColorFilter(new ColorMatrixColorFilter(cm));
在这个示例中,两个效果是相连接的。如果只想增加对比度而不增加亮度,那么实际上必须降低亮度来补偿在颜色强度方面的增加。
通常,当调整亮度时,对每种颜色只使用矩阵的最后一列会更加简单。这仅仅是添加到颜色值,而无需乘以已有的颜色。
因此,为了降低亮度,可以使用矩阵代码如下。
1 ColorMatrix cm=new ColorMatrix(); 2 float brighrness=-25; 3 cm.set(new float[]{ 4 1,0,0,0,brighrness, 5 0,1,0,0,brighrness, 6 0,0,1,0,brighrness, 7 0,0,0,1,0 8 }); 9 paint.setColorFilter(new ColorMatrixColorFilter(cm));
将这两种转换合在一起将产生如下代码。
1 ColorMatrix cm=new ColorMatrix(); 2 float contrast=2; 3 float brighrness=2; 4 cm.set(new float[]{ 5 contrast,0,0,0,brighrness, 6 0,contrast,0,0,brighrness, 7 0,0,contrast,0,brighrness, 8 0,0,0,1,0 9 }); 10 paint.setColorFilter(new ColorMatrixColorFilter(cm));