Compartir a través de


Convertir colores

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]
Alfa [4][3]

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.

Dim image = 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)
[C#]
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);

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

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)