Procedura: convertire i colori delle immagini

Aggiornamento: novembre 2007

Una conversione consente di aggiungere un valore a una o più delle quattro componenti di colore. Le voci della matrice di colore che rappresentano le traslazioni sono indicate nella tabella che segue.

Componente da convertire

Voce della matrice

Rosso

[4][0]

Verde

[4][1]

Blu

[4][2]

Alfa

[4][3]

Esempio

Nell'esempio che segue viene costruito un oggetto Image dal file ColorBars.bmp. Nel codice viene quindi aggiunto 0,75 alla componente rossa di ogni pixel dell'immagine. L'immagine originale viene disegnata accanto all'immagine trasformata.

Nell'illustrazione che segue si mostra l'immagine originale a sinistra e l'immagine trasformata a destra.

Conversione dei colori

Nella tabella che segue sono elencati i vettori di colore per le quattro barre prima e dopo la conversione della componente rossa. Si noti che, poiché il valore massimo per una componente di colore è 1, la componente rossa nella seconda riga non cambia. Il valore minimo per una componente di colore è invece 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)

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

Compilazione del codice

L'esempio riportato in precedenza è stato creato per essere utilizzato con Windows Form e richiede PaintEventArgse, un parametro del gestore eventi Paint. Sostituire ColorBars.bmp con il percorso e il nome del file di immagine validi per il sistema.

Vedere anche

Riferimenti

ColorMatrix

ImageAttributes

Altre risorse

Grafica e disegno in Windows Form

Ricolorazione di immagini