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.
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.