다음을 통해 공유


방법: 색 매트릭스를 사용하여 이미지에 알파 값 설정

Image 클래스에서 상속되는 Bitmap 클래스와 ImageAttributes 클래스에는 픽셀 값을 가져오고 설정하는 기능이 있습니다. ImageAttributes 클래스를 사용하여 전체 이미지의 알파 값을 수정하거나 Bitmap 클래스의 SetPixel 메서드를 호출하여 개별 픽셀 값을 수정할 수 있습니다.

예제

ImageAttributes 클래스에는 렌더링하는 동안 이미지를 수정하는 데 사용할 수 있는 속성이 많이 있습니다. 다음 예제에서는 ImageAttributes 개체를 사용하여 모든 알파 값을 원래 값의 80%로 설정합니다. 이를 위해 색 매트릭스를 초기화하고 매트릭스에서 알파 배율 조정 값을0.8로 설정합니다. 색 매트릭스의 주소는 ImageAttributes 개체의 SetColorMatrix 메서드에 전달되고 ImageAttributes 개체는 Graphics 개체의 DrawString 메서드에 전달됩니다.

렌더링하는 동안 비트맵의 알파 값은 이전 값의 80%로 변환되며, 그에 따라 이미지가 배경과 혼합됩니다. 아래 그림에 나와 있는 것처럼 비트맵 이미지가 투명하므로 이미지를 투과하여 검정 선을 볼 수 있습니다.

매트릭스를 사용한 알파 혼합

배경의 흰색 부분에 있는 이미지는 흰색과 혼합되고 검정 선과 교차하는 곳의 이미지는 검정과 혼합됩니다.

        ' Create the Bitmap object and load it with the texture image.
        Dim bitmap As New Bitmap("Texture.jpg")

        ' Initialize the color matrix.
        ' Note the value 0.8 in row 4, column 4.
        Dim matrixItems 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, 0.8F, 0}, _
           New Single() {0, 0, 0, 0, 1}}

        Dim colorMatrix As New ColorMatrix(matrixItems)

        ' Create an ImageAttributes object and set its color matrix.
        Dim imageAtt As New ImageAttributes()
        imageAtt.SetColorMatrix( _
           colorMatrix, _
           ColorMatrixFlag.Default, _
           ColorAdjustType.Bitmap)

        ' First draw a wide black line.
        e.Graphics.DrawLine( _
           New Pen(Color.Black, 25), _
           New Point(10, 35), _
           New Point(200, 35))

        ' Now draw the semitransparent bitmap image.
        Dim iWidth As Integer = bitmap.Width
        Dim iHeight As Integer = bitmap.Height

        ' Pass in the destination rectangle (2nd argument) and the x _
        ' coordinate (3rd argument), x coordinate (4th argument), width _
        ' (5th argument), and height (6th argument) of the source rectangle.
        e.Graphics.DrawImage( _
           bitmap, _
           New Rectangle(30, 0, iWidth, iHeight), _
           0.0F, _
           0.0F, _
           iWidth, _
           iHeight, _
           GraphicsUnit.Pixel, _
           imageAtt)

// Create the Bitmap object and load it with the texture image.
Bitmap bitmap = new Bitmap("Texture.jpg");

// Initialize the color matrix.
// Note the value 0.8 in row 4, column 4.
float[][] matrixItems ={ 
   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, 0.8f, 0}, 
   new float[] {0, 0, 0, 0, 1}};
ColorMatrix colorMatrix = new ColorMatrix(matrixItems);

// Create an ImageAttributes object and set its color matrix.
ImageAttributes imageAtt = new ImageAttributes();
imageAtt.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   ColorAdjustType.Bitmap);

// First draw a wide black line.
e.Graphics.DrawLine(
   new Pen(Color.Black, 25),
   new Point(10, 35),
   new Point(200, 35));

// Now draw the semitransparent bitmap image.
int iWidth = bitmap.Width;
int iHeight = bitmap.Height;
e.Graphics.DrawImage(
   bitmap,
   new Rectangle(30, 0, iWidth, iHeight),  // destination rectangle
   0.0f,                          // source rectangle x 
   0.0f,                          // source rectangle y
   iWidth,                        // source rectangle width
   iHeight,                       // source rectangle height
   GraphicsUnit.Pixel,
   imageAtt);

코드 컴파일

앞의 예제는 Windows Forms에서 사용해야 하며 PaintEventHandler의 매개 변수인 PaintEventArgs e를 필요로 합니다.

참고 항목

기타 리소스

Windows Forms의 그래픽 및 그리기

선 및 채우기 알파 혼합