Gewusst wie: Verschieben von Bildfarben
Aktualisiert: November 2007
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 ein Image-Objekt aus der Datei ColorBars.bmp 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.
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.)
Original |
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 PaintEventArgse, einen Parameter des Paint-Ereignishandlers. Ersetzen Sie ColorBars.bmp durch einen im System gültigen Bilddateinamen und -pfad.