방법: 색 매트릭스를 사용하여 이미지에 알파 값 설정
업데이트: 2007년 11월
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의 매개 변수인 PaintEventArgse를 필요로 합니다.