次の方法で共有


カラー マトリックスを使用した画像のアルファ値の設定

Bitmap クラス (Image クラスから継承) と ImageAttributes クラスは、ピクセル値を取得および設定するための機能を提供します。 ImageAttributes クラスを使用してイメージ全体のアルファ値を変更することも、Bitmap クラスの Bitmap::SetPixel メソッドを呼び出して個々のピクセル値を変更することもできます。 個々のピクセル値の設定の詳細については、「個々 のピクセルのアルファ値を設定する」を参照してください。

次の例では、広い黒い線を描画し、その線の一部を覆う不透明なイメージを表示します。

Bitmap bitmap(L"Texture1.jpg");
Pen pen(Color(255, 0, 0, 0), 25);
// First draw a wide black line.
graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));
// Now draw an image that covers part of the black line.
graphics.DrawImage(&bitmap,
   Rect(30, 0, bitmap.GetWidth(), bitmap.GetHeight()));

次の図は、(30, 0) で描画される結果の画像を示しています。 幅の広い黒い線は画像を通して表示されません。

薄い、広い、黒い四角形を重ね合わせた不透明な画像を示す図

ImageAttributes クラスには、レンダリング中に画像を変更するために使用できる多くのプロパティがあります。 次の例では、 ImageAttributes オブジェクトを使用して、すべてのアルファ値を 80% に設定しています。 これを行うには、カラー マトリックスを初期化し、マトリックスのアルファの拡大縮小値を 0.8 に設定します。 カラー マトリックスのアドレスは ImageAttributes オブジェクトの ImageAttributes::SetColorMatrix メソッドに渡され、ImageAttributes オブジェクトのアドレスは Graphics オブジェクトの DrawImage メソッドに渡されます。

// Create a Bitmap object and load it with the texture image.
Bitmap bitmap(L"Texture1.jpg");
Pen pen(Color(255, 0, 0, 0), 25);
// Initialize the color matrix.
// Notice the value 0.8 in row 4, column 4.
ColorMatrix colorMatrix = {1.0f, 0.0f, 0.0f, 0.0f, 0.0f,
                           0.0f, 1.0f, 0.0f, 0.0f, 0.0f,
                           0.0f, 0.0f, 1.0f, 0.0f, 0.0f,
                           0.0f, 0.0f, 0.0f, 0.8f, 0.0f,
                           0.0f, 0.0f, 0.0f, 0.0f, 1.0f};
// Create an ImageAttributes object and set its color matrix.
ImageAttributes imageAtt;
imageAtt.SetColorMatrix(&colorMatrix, ColorMatrixFlagsDefault,
   ColorAdjustTypeBitmap);
// First draw a wide black line.
graphics.DrawLine(&pen, Point(10, 35), Point(200, 35));
// Now draw the semitransparent bitmap image.
INT iWidth = bitmap.GetWidth();
INT iHeight = bitmap.GetHeight();
graphics.DrawImage(
   &bitmap, 
   Rect(30, 0, iWidth, iHeight),  // Destination rectangle
   0,                             // Source rectangle X 
   0,                             // Source rectangle Y
   iWidth,                        // Source rectangle width
   iHeight,                       // Source rectangle height
   UnitPixel, 
   &imageAtt);

レンダリング時に、ビットマップのアルファ値が 80% に変換されます。 これにより、画像が背景とブレンドされます。 次の図に示すように、ビットマップ画像は透明に見え、黒の実線が透けて見えています。

図は前の図と似ていますが、画像は sem-transparent です

画像が背景の白い部分の上にある部分については、画像が白色とブレンドされます。 画像が黒い直線と交差する部分については、画像が黒色とブレンドされます。