다음을 통해 공유


방법: 이미지 색 변환

이동에서는 네 가지 색 구성 요소 중 하나 이상에 값을 더합니다. 이동을 나타내는 색 매트릭스 엔트리가 아래 표에 나와 있습니다.

변환할 구성 요소

매트릭스 엔트리

빨강

[4][0]

녹색

[4][1]

파랑

[4][2]

알파

[4][3]

예제

다음 예제에서는 ColorBars.bmp 파일에서 Image 개체를 만듭니다. 이미지에 있는 각 픽셀의 빨강 구성 요소에 0.75를 더합니다. 변환된 이미지 옆에 원래 이미지가 그려집니다.

아래 그림에서 왼쪽은 원래 이미지이고 오른쪽은 변환된 이미지입니다.

색 변환

아래 표에는 빨강 구성 요소를 이동하기 전과 이동 후의 막대 네 개에 대한 색 벡터가 나와 있습니다. 색 구성 요소에 대한 최대값이 1이기 때문에 두 번째 행에서 빨강 구성 요소에 대한 최대값은 변하지 않습니다. 마찬가지로, 색 구성 요소에 대한 최소값은 0입니다.

원래 설정

변환된 이미지

검정 (0, 0, 0, 1)

(0.75, 0, 0, 1)

빨강 (1, 0, 0, 1)

(1, 0, 0, 1)

녹색 (0, 1, 0, 1)

(0.75, 1, 0, 1)

파랑 (0, 0, 1, 1)

(0.75, 0, 1, 1)

        Dim image As New Bitmap("ColorBars.bmp")
        Dim imageAttributes As New ImageAttributes()
        Dim width As Integer = image.Width
        Dim height As Integer = image.Height

        Dim colorMatrixElements As Single()() = { _
           New Single() {1, 0, 0, 0, 0}, _
           New Single() {0, 1, 0, 0, 0}, _
           New Single() {0, 0, 1, 0, 0}, _
           New Single() {0, 0, 0, 1, 0}, _
           New Single() {0.75F, 0, 0, 0, 1}}

        Dim colorMatrix As New ColorMatrix(colorMatrixElements)

        imageAttributes.SetColorMatrix( _
           colorMatrix, _
           ColorMatrixFlag.Default, _
           ColorAdjustType.Bitmap)

        e.Graphics.DrawImage(image, 10, 10, width, height)

        ' Pass in the destination rectangle (2nd argument), the upper-left corner 
        ' (3rd and 4th arguments), width (5th argument),  and height (6th 
        ' argument) of the source rectangle.
        e.Graphics.DrawImage( _
           image, _
           New Rectangle(150, 10, width, height), _
           0, 0, _
           width, _
           height, _
           GraphicsUnit.Pixel, _
           imageAttributes)

Image image = new Bitmap("ColorBars.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;

float[][] colorMatrixElements = { 
   new float[] {1,  0,  0,  0, 0},
   new float[] {0,  1,  0,  0, 0},
   new float[] {0,  0,  1,  0, 0},
   new float[] {0,  0,  0,  1, 0},
   new float[] {.75f, 0, 0, 0, 1}};

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   ColorAdjustType.Bitmap);

e.Graphics.DrawImage(image, 10, 10, width, height);

e.Graphics.DrawImage(
   image,
   new Rectangle(150, 10, width, height),  // destination rectangle 
   0, 0,        // upper-left corner of source rectangle 
   width,       // width of source rectangle
   height,      // height of source rectangle
   GraphicsUnit.Pixel,
   imageAttributes);

코드 컴파일

앞의 예제는 Windows Forms에서 사용해야 하며 Paint 이벤트 처리기의 매개 변수인 PaintEventArgs e를 필요로 합니다. ColorBars.bmp 를 시스템에서 사용할 수 있는 이미지 파일 이름 및 경로로 바꾸십시오.

참고 항목

참조

ColorMatrix

ImageAttributes

기타 리소스

Windows Forms의 그래픽 및 그리기

이미지 다시 칠하기