次の方法で共有


個々のピクセルのアルファ値の設定

イメージでカラー マトリックスを使用してアルファ値を設定する 」トピックでは、画像のアルファ値を変更するための非破壊的な方法を示します。 このトピックの例では、画像が半透明でレンダリングされますが、ビットマップ内のピクセル データは変更されません。 アルファ値は、レンダリング中にのみ変更されます。

次の例は、個々のピクセルのアルファ値を変更する方法を示しています。 この例のコードは、 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::GetPixelBitmap::SetPixel では、個々のピクセル値を制御できます。 ただし、 Bitmap::GetPixelBitmap::SetPixel の使用は、 ImageAttributes クラスと ColorMatrix 構造体を使用するほど高速ではありません。