3.4.1 ColorMatrix

5034 단어 Matrix
Canvas 객체에 Matrix 객체를 그리는 방법과 비슷하며, Canvas 객체에 그려진 Paint 객체를 변경하는 데 ColorMatrix 객체를 사용할 수도 있습니다.
마찬가지로 ColorMatrix는 비슷한 방식으로 작동합니다.이것은 그림의 픽셀을 조작할 수 있는 디지털 그룹이다.그러나 x, y 및 z 좌표와 달리 색상 값 - 각 픽셀의 Red(빨간색), Green(녹색), Blue(파란색) 및 알파 값을 조작합니다.
매개 변수가 없는 구조 함수를 호출하여 기본 ColorMatrix 객체를 만들 수 있습니다.
1 ColorMatrix cm=new ColorMatrix();

ColorMatrix 객체를 사용하여 ColorMatrix ColorFilter 객체를 구축하고 Paint 객체에 적용하여 Canvas 객체의 드로잉 내용을 변경하는 데 사용할 수 있습니다.
1                 ColorMatrix cm=new ColorMatrix();

2                 ColorMatrixColorFilter cmf=new ColorMatrixColorFilter(cm);

3                 paint.setColorFilter(cmf);

ColorMatrix 객체를 시험할 수 있도록 그림 선택 인스턴스의 드로잉 섹션에 간단하게 삽입할 수 있습니다.
 1                 Bitmap bmp=BitmapFactory.decodeStream(getContentResolver().openInputStream(imageFileUri),null,bmpBitmapFactoryOptions);

 2                 Bitmap alteredBitmap=Bitmap.createBitmap(bmp.getWidth(), bmp.getHeight(), bmp.getConfig());

 3                 alteredBitmap=Bitmap.createBitmap(bmp.getWidth()*2, bmp.getHeight(), bmp.getConfig());

 4                 Canvas canvas=new Canvas(alteredBitmap);

 5                 Paint paint=new Paint();

 6                 ColorMatrix cm=new ColorMatrix();

 7                 paint.setColorFilter(new ColorMatrixColorFilter(cm));

 8                 Matrix matrix=new Matrix();

 9                 canvas.drawBitmap(bmp, matrix, paint);

10                 alteredImageView.setImageBitmap(alteredBitmap);

11                 chosenImageView.setImageBitmap(bmp);

기본 ColorMatrix 객체는 기본 Matrix 객체처럼 적용할 때 이미지가 변경되지 않는 이른바 ID입니다.다음 그룹에 포함된 내용을 보면 그들이 어떻게 일을 하는지 이해할 수 있습니다.
    1  0  0  0  0
    0  1  0  0  0
    0  0  1  0  0
    0  0  0  1  0
이것은 20개의 부동점수를 포함하는 수조이다.첫 번째 행에는 단일 픽셀의 빨간색 부분에서, 두 번째 행에는 녹색 부분, 세 번째 행에는 파란색 부분, 마지막 행에는 픽셀의 알파 값이 포함됩니다.
각 행에서 첫 번째 숫자는 픽셀의 빨간색 값과 연관된 승수, 두 번째 숫자는 녹색 값과 연관된 승수, 세 번째 숫자는 파란색, 네 번째 숫자는 알파 값이며 마지막 숫자는 어떤 값에도 곱하지 않습니다.이 값들을 모두 합쳐서 그들이 조작하고 있는 픽셀을 바꾸세요.
빨간색 128, 파란색 128, 녹색 128, 알파 0 등의 중간 회색조 픽셀이 있다고 가정해 보십시오.위의 색상 행렬을 통해 이 픽셀을 조작하면 수학 공식은 다음과 같이 표시됩니다.
새 빨간색 값 = 1*128+0*128+0*128+0*0+0
새 녹색 값 = 0*128+1*128+0*128+0*0+0
새 파란색 값 = 0*128+0*128+1*128+0*0+0
새 알파 값 = 0*128+0*128+0*128+0*128+1*0+0
모든 값이 128로 설정된 상태로 유지됩니다.픽셀에 사용되는 모든 색상 변수의 경우 각 행에는 작업을 나타내는 색상의 위치에 1이 있고 다른 위치에는 0이 있기 때문입니다.
만약 한 폭의 그림이 이전보다 두 배만 빨갛게 보이고 싶다면, 모든 픽셀을 조작하는 빨간색 값의 숫자를 2로 늘려 1을 대체할 수 있다.이것은 행렬의 빨간색 값을 배로 늘릴 것이다.
    2  0  0  0  0
    0  1  0  0  0
    0  0  1  0  0
    0  0  0  1  0
코드에서 이 기능을 수행하려면 다음과 같이 하십시오.
1                 ColorMatrix cm=new ColorMatrix();

2                 cm.set(new float[]{

3                     2,0,0,0,0,

4                     0,1,0,0,0,

5                     0,0,1,0,0,

6                     0,0,0,1,0

7                 });

8                 paint.setColorFilter(new ColorMatrixColorFilter(cm));

따라서 이 행렬을 통해 모든 색을 유사하게 처리할 수 있다.

좋은 웹페이지 즐겨찾기