Compartir a través de


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.

ilustración en la que se muestran dos versiones de una imagen multicolor; la región roja de la primera versión es azul en la segunda versión