Utilisation d’une table de remappage des couleurs

Le remapping est le processus de conversion des couleurs d’une image en fonction d’une table de remappage de couleurs. La table de remappage de couleurs est un tableau de structures ColorMap . Chaque structure ColorMap dans le tableau a un membre oldColor et un nouveau membreColor .

Lorsque GDI+ dessine une image, chaque pixel de l’image est comparé au tableau des anciennes couleurs. Si la couleur d’un pixel correspond à une ancienne couleur, sa couleur est remplacée par la nouvelle couleur correspondante. Les couleurs sont modifiées uniquement pour le rendu. Les valeurs de couleur de l’image elle-même (stockées dans un objet Image ou Bitmap ) ne sont pas modifiées.

Pour dessiner une image remappée, initialisez un tableau de structures ColorMap . Transmettez l’adresse de ce tableau à la méthode ImageAttributes::SetRemapTable d’un objet ImageAttributes , puis transmettez l’adresse de l’objet ImageAttributes à la méthode DrawImage Methods d’un objet Graphics .

L’exemple suivant crée un objet Image à partir du fichier RemapInput.bmp. Le code crée une table de remappage de couleurs qui se compose d’une seule structure ColorMap . Le membre oldColor de la structure ColorMap est rouge et le nouveau membreColor est bleu. L’image est dessinée une fois sans remappage et une fois avec remapping. Le processus de remapping change tous les pixels rouges en bleu.

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

L’illustration suivante montre l’image d’origine à gauche et l’image remappée à droite.

illustration montrant deux versions d’une image multicolore ; la région rouge de la première version est bleue dans la deuxième version