Freigeben über


Scherfarben

Die Scherung erhöht oder verringert eine Farbkomponente um einen Wert, der proportional zu einer anderen Farbkomponente ist. Betrachten wir beispielsweise die Transformation, bei der die rote Komponente um die Hälfte des Werts der blauen Komponente erhöht wird. Bei einer solchen Transformation wird aus der Farbe (0.2, 0.5, 1) die Farbe (0.7, 0.5, 1). Die neue rote Komponente ist 0.2 + (1/2)(1) = 0.7.

Im folgenden Beispiel wird ein Image-Objekt aus der Datei ColorBars4.bmp erstellt. Anschließend wendet der Code die im vorherigen Absatz beschriebene Scherungstransformation auf jedes Pixel im Bild an.

Image            image(L"ColorBars4.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.5f, 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};
   
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);

Die folgende Abbildung zeigt das originale Bild auf der linken Seite und das scherte Bild auf der rechten Seite.

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

Die folgende Tabelle zeigt die Farbvektoren für die vier Balken vor und nach der Schertransformation.

Ursprünglich Mit Scherung
(0, 0, 1, 1) (0.5, 0, 1, 1)
(0.5, 1, 0.5, 1) (0.75, 1, 0.5, 1)
(1, 1, 0, 1) (1, 1, 0, 1)
(0.4, 0.4, 0.4, 1) (0.6, 0.4, 0.4, 1)