Gewusst wie: Verschieben von Bildfarben

Durch die Verschiebung wird einem oder mehreren der vier Farbanteile ein Wert hinzuaddiert. In der folgenden Tabelle sind die Farbmatrixeinträge aufgeführt, die Verschiebungen darstellen.

Zu verschiebende Komponente

Matrixeintrag

Rot

[4][0]

Grün

[4][1]

Blau

[4][2]

Alpha

[4][3]

Beispiel

Im folgenden Beispiel wird aus der Datei ColorBars.bmp ein Image-Objekt erstellt. Anschließend wird der Rotanteil jedes Bildpixels um den Wert 0,75 vergrößert. Das ursprüngliche Bild wird längsseits des transformierten Bildes gezeichnet.

In der folgenden Abbildung ist das ursprüngliche Bild auf der linken und das transformierte Bild auf der rechten Seite zu sehen.

Verschieben von Farben

In der folgenden Tabelle sind die Farbvektoren für die vier Balken vor und nach der Rotverschiebung aufgelistet. Da der Maximalwert für einen Farbanteil 1 beträgt, sollten Sie beachten, dass der Rotanteil in der zweiten Zeile nicht geändert wird. (Der Minimalwert für einen Farbanteil lautet entsprechend dazu 0.)

Ursprünglich

Verschiebung

Schwarz (0, 0, 0, 1)

(0.75, 0, 0, 1)

Rot (1, 0, 0, 1)

(1, 0, 0, 1)

Grün (0, 1, 0, 1)

(0.75, 1, 0, 1)

Blau (0, 0, 1, 1)

(0.75, 0, 1, 1)

        Dim image As New Bitmap("ColorBars.bmp")
        Dim imageAttributes As New ImageAttributes()
        Dim width As Integer = image.Width
        Dim height As Integer = image.Height

        Dim colorMatrixElements As Single()() = { _
           New Single() {1, 0, 0, 0, 0}, _
           New Single() {0, 1, 0, 0, 0}, _
           New Single() {0, 0, 1, 0, 0}, _
           New Single() {0, 0, 0, 1, 0}, _
           New Single() {0.75F, 0, 0, 0, 1}}

        Dim colorMatrix As New ColorMatrix(colorMatrixElements)

        imageAttributes.SetColorMatrix( _
           colorMatrix, _
           ColorMatrixFlag.Default, _
           ColorAdjustType.Bitmap)

        e.Graphics.DrawImage(image, 10, 10, width, height)

        ' Pass in the destination rectangle (2nd argument), the upper-left corner 
        ' (3rd and 4th arguments), width (5th argument),  and height (6th 
        ' argument) of the source rectangle.
        e.Graphics.DrawImage( _
           image, _
           New Rectangle(150, 10, width, height), _
           0, 0, _
           width, _
           height, _
           GraphicsUnit.Pixel, _
           imageAttributes)

Image image = new Bitmap("ColorBars.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;

float[][] colorMatrixElements = { 
   new float[] {1,  0,  0,  0, 0},
   new float[] {0,  1,  0,  0, 0},
   new float[] {0,  0,  1,  0, 0},
   new float[] {0,  0,  0,  1, 0},
   new float[] {.75f, 0, 0, 0, 1}};

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   ColorAdjustType.Bitmap);

e.Graphics.DrawImage(image, 10, 10, width, height);

e.Graphics.DrawImage(
   image,
   new Rectangle(150, 10, width, height),  // destination rectangle 
   0, 0,        // upper-left corner of source rectangle 
   width,       // width of source rectangle
   height,      // height of source rectangle
   GraphicsUnit.Pixel,
   imageAttributes);

Kompilieren des Codes

Das vorhergehende Beispiel ist für die Verwendung mit Windows Forms konzipiert und erfordert PaintEventArgs e, einen Parameter des Paint-Ereignishandlers. Ersetzen Sie ColorBars.bmp durch einen im System gültigen Bilddateinamen und -pfad.

Siehe auch

Referenz

ColorMatrix

ImageAttributes

Weitere Ressourcen

Grafik und Zeichnen in Windows Forms

Neueinfärben von Bildern