個々のピクセルのアルファ値の設定
「 イメージでカラー マトリックスを使用してアルファ値を設定する 」トピックでは、画像のアルファ値を変更するための非破壊的な方法を示します。 このトピックの例では、画像が半透明でレンダリングされますが、ビットマップ内のピクセル データは変更されません。 アルファ値は、レンダリング中にのみ変更されます。
次の例は、個々のピクセルのアルファ値を変更する方法を示しています。 この例のコードは、 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 は新しい色を設定します。 アルファ値は、ビットマップの列に基づいて設定されます。 最初の列では、alpha は 0 に設定されます。 最後の列では、alpha は 255 に設定されます。 そのため、結果の画像は完全に透明 (左端) から完全に不透明 (右端) になります。
Bitmap::GetPixel と Bitmap::SetPixel では、個々のピクセル値を制御できます。 ただし、 Bitmap::GetPixel と Bitmap::SetPixel の使用は、 ImageAttributes クラスと ColorMatrix 構造体を使用するほど高速ではありません。