Compartir a través de


Cómo: Utilizar una tabla de reasignación de colores

El proceso de reasignación convierte los colores de una imagen con arreglo a una tabla de reasignación de colores. Dicha tabla es una matriz de objetos ColorMap. Cada objeto ColorMap de la matriz tiene una propiedad OldColor y una propiedad 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, el color cambia al color nuevo correspondiente. Los colores sólo cambian para la representación; los valores de color de la propia imagen (almacenados en un objeto Image o Bitmap) no varían.

Para dibujar una imagen reasignada, inicialice una matriz de objetos ColorMap. Pase esa matriz al método SetRemapTable de un objeto ImageAttributes y, a continuación, pase el objeto ImageAttributes al método DrawImage de un objeto Graphics.

Ejemplo

En el siguiente ejemplo se crea un objeto Image a partir del archivo RemapInput.bmp. El código crea una tabla de reasignación de colores formada por un objeto ColorMap único. La propiedad OldColor del objeto ColorRemap es roja y la propiedad NewColor es azul. La imagen se dibuja una vez sin reasignación y otra vez con reasignación. El proceso de reasignación cambia todos los píxeles rojos a azul.

En la siguiente ilustración se muestra la imagen original a la izquierda y la imagen reasignada a la derecha.

Reasignación de colores

        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);

Compilar el código

El ejemplo anterior está diseñado para formularios Windows Forms y requiere PaintEventArgs e, que es un parámetro del controlador del evento Paint.

Vea también

Otros recursos

Cambiar el color de las imágenes

Imágenes, mapas de bits y metarchivos