개별 픽셀의 알파 값 설정

색 행렬을 사용하여 이미지에서 알파 값 설정 항목은 이미지의 알파 값을 변경하기 위한 비파파 메서드를 보여 줍니다. 해당 항목의 예제는 이미지를 반투명하게 렌더링하지만 비트맵의 픽셀 데이터는 변경되지 않습니다. 알파 값은 렌더링 중에만 변경됩니다.

다음 예제에서는 개별 픽셀의 알파 값을 변경하는 방법을 보여 줍니다. 예제의 코드는 실제로 Bitmap 개체의 알파 정보를 변경합니다. 이 방법은 색 행렬 및 ImageAttributes 개체를 사용하는 것보다 훨씬 느리지만 비트맵의 개별 픽셀을 제어할 수 있습니다.

INT iWidth = bitmap.GetWidth();
INT iHeight = bitmap.GetHeight();
Color color, colorTemp;
for(INT iRow = 0; iRow < iHeight; iRow++)
{
   for(INT iColumn = 0; iColumn < iWidth; iColumn++)
   {
      bitmap.GetPixel(iColumn, iRow, &color);
      colorTemp.SetValue(color.MakeARGB(
         (BYTE)(255 * iColumn / iWidth), 
         color.GetRed(),
         color.GetGreen(),
         color.GetBlue()));
      bitmap.SetPixel(iColumn, iRow, colorTemp);
   }
}
// First draw a wide black line.
Pen pen(Color(255, 0, 0, 0), 25);
graphics.DrawLine(&pen, 10, 35, 200, 35);
// Now draw the modified bitmap.
graphics.DrawImage(&bitmap, 30, 0, iWidth, iHeight);

다음 그림에서는 결과 이미지를 보여 줍니다.

왼쪽에서 오른쪽으로, 검은색 사각형 위에 더 불투명하게 표시되는 이미지를 보여 주는 그림

앞의 코드 예제에서는 중첩된 루프를 사용하여 비트맵에서 각 픽셀의 알파 값을 변경합니다. 각 픽셀에 대해 Bitmap::GetPixel 은 기존 색을 가져오고 Color::SetValue 는 새 알파 값을 포함하는 임시 색을 만든 다음 Bitmap::SetPixel 이 새 색을 설정합니다. 알파 값은 비트맵의 열에 따라 설정됩니다. 첫 번째 열에서 알파는 0으로 설정됩니다. 마지막 열에서 알파는 255로 설정됩니다. 따라서 결과 이미지는 완전히 투명(왼쪽 가장자리)에서 완전히 불투명(오른쪽 가장자리)으로 이동합니다.

Bitmap::GetPixelBitmap::SetPixel 을 사용하면 개별 픽셀 값을 제어할 수 있습니다. 그러나 Bitmap::GetPixelBitmap::SetPixel 을 사용하는 것은 ImageAttributes 클래스 및 ColorMatrix 구조체를 사용하는 것만큼 빠르지 않습니다.