Uso di una tabella di rimappatura dei colori
Il nuovo mapping è il processo di conversione dei colori in un'immagine in base a una tabella di mapping dei colori. La tabella del mapping dei colori è una matrice di strutture ColorMap . Ogni struttura ColorMap nella matrice ha un membro oldColor e un nuovo membroColor .
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 oggetto Image o Bitmap ) non vengono modificati.
Per disegnare un'immagine mappata, inizializzare una matrice di strutture ColorMap . Passare l'indirizzo della matrice al metodo ImageAttributes::SetRemapTable di un oggetto ImageAttributes e quindi passare l'indirizzo dell'oggetto ImageAttributes al metodo DrawImage Methods di un oggetto Graphics .
Nell'esempio seguente viene creato un oggetto Image dal file RemapInput.bmp. Il codice crea una tabella di mapping dei colori costituita da una singola struttura ColorMap . Il membro oldColor della struttura ColorMap è rosso e il membro newColor è 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.
Image image(L"RemapInput.bmp");
ImageAttributes imageAttributes;
UINT width = image.GetWidth();
UINT height = image.GetHeight();
ColorMap colorMap[1];
colorMap[0].oldColor = Color(255, 255, 0, 0); // opaque red
colorMap[0].newColor = Color(255, 0, 0, 255); // opaque blue
imageAttributes.SetRemapTable(1, colorMap, ColorAdjustTypeBitmap);
graphics.DrawImage(&image, 10, 10, width, height);
graphics.DrawImage(
&image,
Rect(150, 10, width, height), // destination rectangle
0, 0, // upper-left corner of source rectangle
width, // width of source rectangle
height, // height of source rectangle
UnitPixel,
&imageAttributes);
La figura seguente mostra l'immagine originale a sinistra e l'immagine mappata a destra.