Share via


Procedura: convertire i colori delle immagini

Una traduzione aggiunge un valore a uno o più dei quattro componenti di colore. Le voci della matrice di colori che rappresentano le traduzioni vengono fornite nella tabella seguente.

Componente da tradurre Voce matrice
Rosso [4][0]
Verde [4][1]
Blu [4][2]
Alfa [4][3]

Esempio

Nell'esempio seguente viene creato un Image oggetto dal file ColorBars.bmp. Il codice aggiunge quindi 0,75 al componente rosso di ogni pixel nell'immagine. L'immagine originale viene disegnata insieme all'immagine trasformata.

La figura seguente mostra l'immagine originale a sinistra e l'immagine trasformata a destra:

Screenshot of the original and transformed image.

Nella tabella seguente sono elencati i vettori di colore per le quattro barre prima e dopo la traslazione rossa. Si noti che poiché il valore massimo per un componente colore è 1, il componente rosso nella seconda riga non cambia. Analogamente, il valore minimo per un componente colore è 0.

Originale Convertito
Nero (0, 0, 0, 1) (0.75, 0, 0, 1)
Rosso (1, 0, 0, 1) (1, 0, 0, 1)
Verde (0, 1, 0, 1) (0.75, 1, 0, 1)
Blu (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)

Compilazione del codice

L'esempio precedente è progettato per l'uso con Windows Form e richiede PaintEventArgse, un parametro del gestore eventi Paint. Sostituire ColorBars.bmp con un nome e un percorso di file di immagine validi nel sistema.

Vedi anche