Procedura: utilizzare una tabella di riassociazione cromatica

Aggiornamento: novembre 2007

La riassociazione è il processo di conversione dei colori in un'immagine in base a una tabella di riassociazione cromatica. Tale tabella è una matrice di oggetti ColorMap. Ogni oggetto ColorMap contenuto nella matrice dispone di una proprietà OldColor e di una proprietà NewColor.

Quando si disegna un'immagine con GDI+, ciascun pixel dell'immagine viene confrontato con la matrice dei colori precedenti. Se il colore di un pixel corrisponde a uno dei colori precedenti al pixel viene applicato il nuovo colore corrispondente. I colori sono modificati solo a scopo di rendering; i valori cromatici veri e propri dell'immagine, memorizzati in un oggetto Image o Bitmap, non vengono modificati.

Per disegnare un'immagine riassociata, inizializzare una matrice di oggetti ColorMap. Passare la matrice al metodo SetRemapTable di un oggetto ImageAttributes, quindi passare l'oggetto ImageAttributes al metodo DrawImage di un oggetto Graphics.

Esempio

Nell'esempio riportato di seguito viene creato un oggetto Image dal file RemapInput.bmp. Nel codice viene creata una tabella di riassociazione cromatica costituita da un unico oggetto ColorMap. La proprietà OldColor dell'oggetto ColorRemap è il rosso e la proprietà NewColor è il blu. L'immagine viene disegnata una volta con e una volta senza riassociazione. Tramite il processo di riassociazione tutti i pixel rossi vengono cambiati in blu.

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

Riassociazione cromatica

Dim image As New Bitmap("RemapInput.bmp")
Dim imageAttributes As New ImageAttributes()
Dim width As Integer = image.Width
Dim height As Integer = image.Height
Dim colorMap As New ColorMap()

colorMap.OldColor = Color.FromArgb(255, 255, 0, 0) ' opaque red
colorMap.NewColor = Color.FromArgb(255, 0, 0, 255) ' opaque blue
Dim remapTable As ColorMap() = {colorMap}

imageAttributes.SetRemapTable(remapTable, 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("RemapInput.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;
ColorMap colorMap = new ColorMap();

colorMap.OldColor = Color.FromArgb(255, 255, 0, 0);  // opaque red
colorMap.NewColor = Color.FromArgb(255, 0, 0, 255);  // opaque blue

ColorMap[] remapTable = { colorMap };

imageAttributes.SetRemapTable(remapTable, 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.

Vedere anche

Altre risorse

Ricolorazione di immagini

Immagini, bitmap e metafile