Ver Mensaje Individual
  #6 (permalink)  
Antiguo 14/12/2007, 10:54
Avatar de kalixe985
kalixe985
 
Fecha de Ingreso: junio-2006
Ubicación: Colombiano viviendo en Es
Mensajes: 73
Antigüedad: 18 años, 8 meses
Puntos: 0
De acuerdo Re: Guardar Bitmaps con contraste u opacidad

Hola!!!
Al final he encontrado una forma de hacerlo:

" Lo que estas buscando son las matrices de transformación de color, estas matrices te permiten trasladar o escalar la información de color de una imagen.

Una matriz de transformación esta compuesta de una matriz de 5x5 puntos definidos como floats, siendo su distribución esta:

Código:
float[][] colorMatrixPoints = new float[][] {

                new float[]{r,  0,   0,   0,  0},
                new float[]{0,  g,   0,  0,  0},
                new float[]{0,  0,   b,  0,  0},
                new float[]{0,  0,   0,  a,  0},
                new float[]{t1, t2, t3, t4, 1}

            };

Los valores r,g,b y a son los multiplicadores de color que nos permiten escalar los colores, por ejemplo, si ponemos 0.5 en el canal r y aplicamos la matriz sobre una imagen con un valor de rojo de 0.2 esta se nos quedaría en 0.1 (los colores pueden valer entre 0 y 1 en vez de entre 0 y 255).

Los valores t1 a t4 son los valores de translación de color, en vez de multiplicar la información por el valor, este se suma al valor actual del canal especificado (t1=r, t2=g...).

Como puedes ver, cambiando los valores de r g y b haces un cambio de contraste, mientras que con t1, t2 y t3 cambias el brillo.

Una vez creada la matriz con los puntos creamos la matriz en sí y se la asignamos a un ImageAttributes que posteriormente usaremos para dibujar la imagen con los nuevos valores:


Código:
ColorMatrix cm = new ColorMatrix(colorMatrixPoints);
    ImageAttributes imgAttr = new ImageAttributes();
    imgAttr.SetColorMatrix(cm);
Ahora solo nos queda dibujar la imagen original en una nueva imagen aplicandole el ImageAttributes que hemos creado previamente:


Código:
//Se supone que la imagen original está cargada en un Bitmap llamado Source
    Bitmap bmpdest = new Bitmap(Source.Width, Source.Height, Source.PixelFormat);
    Graphics g = Graphics.FromImage(bmpdest);
    g.DrawImage(Source, new Rectangle(Point.Empty, bmpdest.Size), 0, 0, Source.Width, Source.Height, GraphicsUnit.Pixel, imgAttr);
    g.Dispose();
    imgAttr.Dispose();
Y con esto ya tienes tu imagen lista para salvar con el contraste y el brillo modificado.
DR GUSMAN. "


Gracias y saludos!!!