Uso de una tabla de reasignación de colores
La reasignación es el proceso de convertir los colores en una imagen según una tabla de reasignación de colores. La tabla de reasignación de colores es una matriz de estructuras ColorMap . Cada estructura ColorMap de la matriz tiene un miembro oldColor y un miembro newColor .
Cuando GDI+ dibuja una imagen, cada píxel de esta se compara con la matriz de colores antiguos. Si el color de un píxel coincide con un color antiguo, su color se cambia al nuevo color correspondiente. Los colores solo se cambian para la representación; los valores de color de la propia imagen (almacenados en un objeto Image o Bitmap ) no se cambian.
Para dibujar una imagen reasignada, inicialice una matriz de estructuras ColorMap . Pase la dirección de esa matriz al método ImageAttributes::SetRemapTable de un objeto ImageAttributes y, a continuación, pase la dirección del objeto ImageAttributes al método DrawImage Methods de un objeto Graphics .
En el ejemplo siguiente se crea un objeto Image a partir del archivo RemapInput.bmp. El código crea una tabla de reasignación de color que consta de una única estructura ColorMap . El miembro oldColor de la estructura ColorMap es rojo y el miembro newColor es azul. La imagen se dibuja una vez sin reasignación y otra con reasignación. El proceso de reasignación cambia todos los píxeles de color rojo a azul.
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);
En la ilustración siguiente se muestra la imagen original a la izquierda y la imagen reasignada a la derecha.