Condividi tramite


Utilizzo di una tabella di riassociazione cromatica

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. Ciascun oggetto ColorMap nella matrice presenta una proprietà OldColor e 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.

Nell'esempio che segue viene creato un oggetto Image a partire 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 è impostata su rosso, la proprietà NewColor su blu. L'immagine viene disegnata una volta con e una volta senza riassociazione. Tramite il processo di riassocazione tutti i pixel rossi vengono cambiati in blu.

Dim image = 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)
[C#]
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);

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