Share via


Übersetzen von Farben

Eine Translation fügt einer oder mehreren der vier Farbkomponenten einen Wert hinzu. Die Farbmatrixeinträge, die Translationen darstellen, finden Sie in der folgenden Tabelle.

Translation für Komponente Matrixeintrag
Red [4][0]
Grün [4][1]
Blau [4][2]
Alpha [4][3]

 

Im folgenden Beispiel wird ein Image-Objekt aus der Datei ColorBars.bmp erstellt. Anschließend fügt der Code der Rot-Komponente jedes Pixels im Bild 0,75 hinzu. Das Originalbild wird neben dem transformierten Bild gezeichnet.

Image            image(L"ColorBars.bmp");
ImageAttributes  imageAttributes;
UINT             width = image.GetWidth();
UINT             height = image.GetHeight();

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, 1.0f, 0.0f,
   0.75f, 0.0f, 0.0f, 0.0f, 1.0f};
   
imageAttributes.SetColorMatrix(
   &colorMatrix, 
   ColorMatrixFlagsDefault,
   ColorAdjustTypeBitmap);
   
graphics.DrawImage(&image, 10, 10, width, height);

graphics.DrawImage(
   &image, 
   Rect(150, 10, width, height),  // destination rectangle 
   0, 0,        // upper-left corner of source rectangle 
   width,       // width of source rectangle
   height,      // height of source rectangle
   UnitPixel,
   &imageAttributes);

In der folgenden Abbildung wird links das Originalbild und rechts das transformierte Bild gezeigt.

Abbildung mit vier farbigen Balken und dann den gleichen Balken mit unterschiedlichen Farben

In der folgenden Tabelle sind die Farbvektoren für die vier Balken vor und nach der Translation aufgeführt. Beachten Sie, dass sich die Rot-Komponente in der zweiten Zeile nicht ändert, da der Höchstwert für eine Farbkomponente 1 beträgt. (Ähnlich ist der Mindestwert für eine Farbkomponente 0.)

Ursprünglich Übersetzt
Black (0, 0, 0, 1) (0.75, 0, 0, 1)
Red (1, 0, 0, 1) (1, 0, 0, 1)
Green (0, 1, 0, 1) (0.75, 1, 0, 1)
Blue (0, 0, 1, 1) (0.75, 0, 1, 1)