Verwenden einer Farbmatrix zum Festlegen von Alphawerten in Bildern
Die Bitmap-Klasse (die von der Image-Klasse erbt) und die ImageAttributes-Klasse bieten Funktionen zum Abrufen und Festlegen von Pixelwerten. Sie können die ImageAttributes-Klasse verwenden, um die Alphawerte für ein gesamtes Bild zu ändern, oder Sie können die Bitmap::SetPixel-Methode der Bitmap-Klasse aufrufen, um einzelne Pixelwerte zu ändern. Weitere Informationen zum Festlegen einzelner Pixelwerte finden Sie unter Festlegen der Alphawerte einzelner Pixel.
Das folgende Beispiel zeichnet eine breite schwarze Linie und zeigt dann ein undurchsichtiges Bild an, das einen Teil dieser Linie abdeckt.
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()));
Die folgende Abbildung zeigt das resultierende Bild, das an (30, 0) gezeichnet wird. Beachten Sie, dass die breite schwarze Linie nicht durch das Bild angezeigt wird.
Die ImageAttributes-Klasse verfügt über viele Eigenschaften, die Sie verwenden können, um Bilder während des Renderings zu ändern. Im folgenden Beispiel wird ein ImageAttributes-Objekt verwendet, um alle Alphawerte auf 80 Prozent ihrer Werte festzulegen. Dazu wird eine Farbmatrix initialisiert und der Alpha-Skalierungswert in der Matrix auf 0,8 festgelegt. Die Adresse der Farbmatrix wird an die ImageAttributes::SetColorMatrix-Methode des ImageAttributes-Objekts übergeben, und die Adresse des ImageAttributes-Objekts wird an die DrawImage-Methode eines Graphics-Objekts übergeben.
// 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);
Beim Rendern werden die Alphawerte in der Bitmap auf 80 Prozent ihres ursprünglichen Werts reduziert. Das Ergebnis ist ein Bild, das mit dem Hintergrund verschmilzt. Wie die folgende Abbildung zeigt, wirkt das Bitmapbild transparent, Sie können die einfarbige schwarze Linie durch das Bild sehen.
Dort, wo sich das Bild über dem weißen Bereich des Hintergrunds befindet, wird es mit der Farbe Weiß gemischt. Dort, wo das Bild die schwarze Linie kreuzt, wird das Bild mit der Farbe Schwarz gemischt.