Comment : utiliser une table de remappage des couleurs

Le remapping est le processus de conversion des couleurs dans une image en fonction d’une table de remappage de couleurs. La table de remappage de couleurs est un tableau d’objets ColorMap . Chaque ColorMap objet du tableau a une OldColor propriété et une NewColor propriété.

Lorsque GDI+ dessine une image, chaque pixel de l’image est comparé au tableau d’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 Image ou Bitmap un objet) ne sont pas modifiées.

Pour dessiner une image remappée, initialisez un tableau d’objets ColorMap . Passez ce tableau à la SetRemapTable méthode d’un ImageAttributes objet, puis passez l’objet ImageAttributes à la DrawImage méthode d’un Graphics objet.

Exemple

L’exemple suivant crée un Image objet à partir du fichier RemapInput.bmp. Le code crée une table de remappage de couleurs qui se compose d’un seul ColorMap objet. La OldColor propriété de l’objet ColorRemap est rouge et la NewColor propriété est bleue. L’image est dessinée une fois sans remapping et une fois avec remapping. Le processus de remapping modifie tous les pixels rouges en bleu.

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

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)

Compilation du code

L'exemple précédent est conçu pour une utilisation avec Windows Forms et nécessite PaintEventArgse, qui est un paramètre du gestionnaire d'événements Paint.

Voir aussi