Compartir a través de


Cómo: Recortar colores

El recorte aumenta o disminuye un componente de color en una cantidad proporcional a otro componente de color. Pongamos, por ejemplo, la transformación en la que el componente rojo se incrementa en la mitad del valor del componente azul. Con dicha transformación, el color (0.2, 0.5, 1) se convertiría en (0.7, 0.5, 1). El nuevo componente rojo es 0,2 + (1/2)(1) = 0,7.

Ejemplo

En el siguiente ejemplo se crea un objeto Image a partir del archivo ColorBars4.bmp. A continuación, el código aplica la transformación de recorte descrita en el párrafo anterior a cada píxel de la imagen.

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

Sesgar colores

La siguiente tabla recoge los vectores de color de las cuatro barras antes y después de la transformación de recorte.

Original

Recorte

(0, 0, 1, 1)

(0.5, 0, 1, 1)

(0.5, 1, 0.5, 1)

(0.75, 1, 0.5, 1)

(1, 1, 0, 1)

(1, 1, 0, 1)

(0.4, 0.4, 0.4, 1)

(0.6, 0.4, 0.4, 1)

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.5F, 0, 1, 0, 0}, _
        New Single() {0, 0, 0, 1, 0}, _
        New Single() {0, 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)

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.5f,  0,  1,  0, 0},
        new float[] {0,  0,  0,  1, 0},
        new float[] {0, 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 imagen y una ruta de acceso válidos en el sistema.

Vea también

Referencia

ColorMatrix

ImageAttributes

Otros recursos

Gráficos y dibujos en Windows Forms

Cambiar el color de las imágenes