Procedura: utilizzare una tabella di riassociazione cromatica

La modifica del mapping è il processo di conversione dei colori in un'immagine in base a una tabella di mapping dei colori. La tabella di mapping dei colori è una matrice di ColorMap oggetti. Ogni ColorMap oggetto nella matrice ha una OldColor proprietà e una NewColor proprietà .

Quando GDI+ disegna un'immagine, ogni pixel dell'immagine viene confrontato con la matrice di colori precedenti. Se il colore di un pixel corrisponde a un colore precedente, il colore viene modificato nel nuovo colore corrispondente. I colori vengono modificati solo per il rendering. I valori di colore dell'immagine stessa (archiviati in un Image oggetto o Bitmap ) non vengono modificati.

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

Esempio

Nell'esempio seguente viene creato un Image oggetto dal file RemapInput.bmp. Il codice crea una tabella di mapping dei colori costituita da un singolo ColorMap oggetto. La OldColor proprietà dell'oggetto ColorRemap è rossa e la NewColor proprietà è blu. L'immagine viene disegnata una volta senza eseguire il mapping e una volta con il mapping. Il processo di modifica del mapping modifica tutti i pixel rossi in blu.

La figura seguente mostra l'immagine originale a sinistra e l'immagine mappata a destra.

Screenshot showing the original image and the remapped image.

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

Compilazione del codice

L'esempio precedente è progettato per l'uso con Windows Form e richiede PaintEventArgse, un parametro del gestore eventi Paint.

Vedi anche