Vorgehensweise: Verschieben von Bildfarben

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]

Beispiel

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.

In der folgenden Abbildung wird links das ursprüngliche Bild und rechts das transformierte Bild gezeigt:

Screenshot of the original and transformed image.

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

Kompilieren des Codes

Das obige Beispiel ist für die Verwendung in Windows Forms konzipiert und erfordert PaintEventArgse, einen Parameter des Paint-Ereignishandlers. Ersetzen Sie ColorBars.bmp durch einen Bilddateinamen und -pfad, die auf Ihrem System gültig sind.

Siehe auch