Share via


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.

illustrazione che mostra due versioni di un'immagine colorata; l'area rossa nella prima versione è blu nella seconda versione