Procedura: variare le componenti cromatiche

Aggiornamento: novembre 2007

Questa operazione consiste nell'aumentare o diminuire una componente cromatica in modo proporzionale a un'altra. Si consideri ad esempio una trasformazione in cui la componente rossa viene aumentata della metà del valore di quella blu. Applicando tale trasformazione il colore (0,2, 0,5, 1) diventa (0,7, 0,5, 1). La nuova componente rossa è 0,2 + (1/2)(1) = 0,7.

Esempio

Nell'esempio riportato di seguito viene costruito un oggetto Image dal file ColorBars4.bmp. La trasformazione per variazione descritta nel paragrafo precedente viene quindi applicata a ciascuno dei pixel nell'immagine.

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

Variazione delle componenti cromatiche

Nella tabella che segue sono elencati i vettori di colore per le quattro barre prima e dopo la trasformazione per variazione.

Originale

Variato

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

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

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 nome e il percorso di un'immagine validi nel computer in uso.

Vedere anche

Riferimenti

ColorMatrix

ImageAttributes

Altre risorse

Grafica e disegno in Windows Form

Ricolorazione di immagini