Comment : utiliser une table de remappage des couleurs
Le remappage est le processus de conversion des couleurs dans une image selon une table de remappage des couleurs. La table de remappage des couleurs est un tableau d'objets ColorMap. Chaque objet ColorMap du tableau possède une propriété OldColor et une propriété NewColor.
Lorsque GDI+ dessine une image, chaque pixel de cette image est comparé au tableau des anciennes couleurs. Si une couleur d'un pixel correspond à une ancienne couleur, celle-ci est modifiée dans la nouvelle couleur correspondante. Les couleurs sont modifiées uniquement à des fins de restitution : les valeurs de couleur de l'image elle-même (stockées dans un objet Image ou Bitmap) restent inchangées.
Pour dessiner une image remappée, initialisez un tableau d'objets ColorMap. Passez ce tableau à la méthode SetRemapTable d'un objet ImageAttributes, puis passez l'objet ImageAttributes à la méthode DrawImage d'un objet Graphics.
Exemple
L'exemple suivant crée un objet Image à partir du fichier RemapInput.bmp. Le code crée une table de remappage des couleurs qui se compose d'un objet ColorMap unique. La propriété OldColor de l'objet ColorRemap est rouge, et la propriété NewColor est bleue. L'image est dessinée une fois sans le remappage et une fois avec le remappage. Le processus de remappage modifie tous les pixels rouges en pixels bleus.
L'illustration suivante montre l'image d'origine sur la gauche et l'image remappée sur la droite.
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)
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);
Compilation du code
L'exemple précédent est destiné à une utilisation avec Windows Forms et nécessite PaintEventArgs e, qui est un paramètre du gestionnaire d'événements Paint.