Utilisation d'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 contient une propriété OldColor et une propriété NewColor.
Lorsque GDI+ dessine une image, chaque pixel de l'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 (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 l'objet ImageAttributes à la méthode DrawImage 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 des couleurs qui comporte un objet ColorMap unique. La propriété OldColor de l'objet ColorRemap est rouge et la propriété NewColor 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.
Dim image = 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)
[C#]
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);
L'illustration suivante montre l'image d'origine sur la gauche et l'image remappée sur la droite.