Vorgehensweise: Scheren von Farben
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.
Beispiel
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.
In der folgenden Abbildung wird links das ursprüngliche Bild und rechts das Bild mit Scherung gezeigt:
In der folgenden Tabelle sind die Farbvektoren für die vier Balken von und nach der Scherungstransformation aufgeführt.
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) |
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);
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)
Kompilieren des Codes
Das obige 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 Bildnamen und einen Pfad, die auf Ihrem System gültig sind.
Siehe auch
.NET Desktop feedback