Cómo: Colores de desbaste

El escilamiento aumenta o disminuye un componente de color en una cantidad proporcional a otro componente de color. Por ejemplo, considere la transformación donde el componente rojo aumenta en una mitad el valor del componente azul. En esta 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 ejemplo siguiente se construye un Image objeto a partir del archivo ColorBars4.bmp. A continuación, el código aplica la transformación de ajuste de tamaño descrito en el párrafo anterior a cada píxel de la imagen.

En la ilustración siguiente se muestra la imagen original a la izquierda y la imagen descijada a la derecha:

Dos cuadrados con franjas coloreadas lado a lado que ilustran la imagen original y la imagen distorsionada.

En la tabla siguiente se enumeran los vectores de color de las cuatro barras antes y después de la transformación de corte.

Texto original en inglés Esquilada
(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)
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);
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)

Compilar el código

El ejemplo anterior está diseñado para su uso con Windows Forms y requiere PaintEventArgse, que es un parámetro del Paint controlador de eventos. Reemplace por ColorBars.bmp un nombre de imagen y una ruta de acceso válidas en el sistema.

Consulte también