Compartir a través de


Cómo: Convertir colores de imágenes

Las conversiones agregan un valor a uno o a varios de los cuatro componentes de color. En la siguiente tabla se recogen las entradas de matriz de color que representan conversiones.

Componente que se va a convertir

Entrada de la matriz

Rojo

[4][0]

Verde

[4][1]

Azul

[4][2]

Alfabética

[4][3]

Ejemplo

En el siguiente ejemplo se crea un objeto Image a partir del archivo ColorBars.bmp. A continuación, el código agrega 0,75 al componente rojo de cada píxel de la imagen. La imagen original se dibuja al lado de la imagen transformada.

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

Conversión de colores

En la siguiente tabla se recogen los vectores de color de las cuatro barras antes y después de la conversión del rojo. Dado que el valor máximo de un componente de color es 1, el componente rojo de la segunda fila no varía. Del mismo modo, el valor mínimo de un componente de color es 0.

Original

Conversión

Negro (0, 0, 0, 1)

(0.75, 0, 0, 1)

Rojo (1, 0, 0, 1)

(1, 0, 0, 1)

Verde (0, 1, 0, 1)

(0.75, 1, 0, 1)

Azul (0, 0, 1, 1)

(0.75, 0, 1, 1)

        Dim image As New Bitmap("ColorBars.bmp")
        Dim imageAttributes As New ImageAttributes()
        Dim width As Integer = image.Width
        Dim height As Integer = image.Height

        Dim colorMatrixElements As Single()() = { _
           New Single() {1, 0, 0, 0, 0}, _
           New Single() {0, 1, 0, 0, 0}, _
           New Single() {0, 0, 1, 0, 0}, _
           New Single() {0, 0, 0, 1, 0}, _
           New Single() {0.75F, 0, 0, 0, 1}}

        Dim colorMatrix As New ColorMatrix(colorMatrixElements)

        imageAttributes.SetColorMatrix( _
           colorMatrix, _
           ColorMatrixFlag.Default, _
           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("ColorBars.bmp");
ImageAttributes imageAttributes = new ImageAttributes();
int width = image.Width;
int height = image.Height;

float[][] colorMatrixElements = { 
   new float[] {1,  0,  0,  0, 0},
   new float[] {0,  1,  0,  0, 0},
   new float[] {0,  0,  1,  0, 0},
   new float[] {0,  0,  0,  1, 0},
   new float[] {.75f, 0, 0, 0, 1}};

ColorMatrix colorMatrix = new ColorMatrix(colorMatrixElements);

imageAttributes.SetColorMatrix(
   colorMatrix,
   ColorMatrixFlag.Default,
   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. Reemplace ColorBars.bmp por un nombre de archivo de imagen y una ruta de acceso que sean válidos en su sistema.

Vea también

Referencia

ColorMatrix

ImageAttributes

Otros recursos

Gráficos y dibujos en Windows Forms

Cambiar el color de las imágenes