Freigeben über


Gewusst wie: Scheren von Farben

Aktualisiert: November 2007

Beim Scheren wird ein Farbanteil um einen Wert verringert oder erhöht, der sich proportional zu einem anderen Farbanteil verhält. Beachten Sie beispielsweise die Transformation, bei der der Rotanteil um die Hälfte des Werts des Blauanteils vergrößert wird. Bei einer solchen Transformation würde die Farbe (0.2, 0.5, 1) zu (0.7, 0.5, 1) werden. Der Wert des neuen Rotanteils ergibt sich aus 0.2 + (1/2)(1) = 0.7.

Beispiel

Im folgenden Beispiel wird aus der Datei ColorBars4.bmp ein Image-Objekt erstellt. Anschließend wird im Code die im vorangehenden Abschnitt erläuterte Schertransformation auf jedes Bildpixel angewendet.

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

In der folgenden Tabelle sind die Farbvektoren für die vier Balken vor und nach der Schertransformation aufgelistet.

Original

Schertransformation

(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)

Dim image = 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.5F, 0, 1, 0, 0}, _
        New Single() {0, 0, 0, 1, 0}, _
        New Single() {0, 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)

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.5f,  0,  1,  0, 0},
        new float[] {0,  0,  0,  1, 0},
        new float[] {0, 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 PaintEventArgse, einen Parameter des Paint-Ereignishandlers. Ersetzen Sie ColorBars.bmp durch einen für das System gültigen Bildnamen und Pfad.

Siehe auch

Referenz

ColorMatrix

ImageAttributes

Weitere Ressourcen

Grafik und Zeichnen in Windows Forms

Neueinfärben von Bildern