3.4.2 명암비 및 밝기 변경
4099 단어 개변
다음 코드는 모든 색 채널의 강도를 배로 높여 그림의 밝기와 대비도에 영향을 줄 것이다
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));