CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: kalixe985 en Miércoles 12 de Diciembre de 2007, 01:29
Título: Guardar Bitmaps Con Contraste U Opacidad
Publicado por: kalixe985 en Miércoles 12 de Diciembre de 2007, 01:29
Hola!!!! Me gustaría saber si en C# hay alguna forma de guardar los Bitmaps, pero añadiendoles o quitándoles contraste o añadiendoles o quitandoles opacidad. Concretamente, lo que quiero es guardar 2 versiones de una misma imagen, una normal y otra con más contraste (más luminosa), para luego utilizar estas 2 imágenes en un botón una aplicación fuera de C#. La imagen normal sería la que aparecería cunado el botón está en estado normal y la imagen con contraste sería la que aparecería cuando hago click o MouseHover, por ejemplo. He mirado si existe una propiedad Opacity para los Bitmap o los Image, pero me parece que no hay.
A ver si alguien me puede ayudar, gracias de antemano!!!! Salu2!!!
Título: Re: Guardar Bitmaps Con Contraste U Opacidad
Publicado por: JuanK en Jueves 13 de Diciembre de 2007, 02:16
edita la imagen en una app externa crea las dos imagenes y lueo por codigo alternas las imagenes en el boton... no es necesario que te compliques aplicando tu mismo... por codigo el contraste a la imagen...
Título: Re: Guardar Bitmaps Con Contraste U Opacidad
Publicado por: kalixe985 en Jueves 13 de Diciembre de 2007, 11:21
Cita de: "JuanK"
edita la imagen en una app externa crea las dos imagenes y lueo por codigo alternas las imagenes en el boton... no es necesario que te compliques aplicando tu mismo... por codigo el contraste a la imagen...
Hola!!! Tiene que ser mi aplicación quien lo haga. De todas formas, como veo que es complicado hacerlo, es posible que no lo haga o que busque otra solución. Gracias y saludes!!!
Título: Re: Guardar Bitmaps Con Contraste U Opacidad
Publicado por: JuanK en Jueves 13 de Diciembre de 2007, 15:13
puedes hacerla usando punteros en contextos unsafe... tal como te lo propusieron en msdn o mejor aun puedes usar Bitmap.Lockbits y Marshal
Título: Re: Guardar Bitmaps Con Contraste U Opacidad
Publicado por: kalixe985 en Viernes 14 de Diciembre de 2007, 17:55
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: Text
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: Text
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: Text
//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!!!
Título: Re: Guardar Bitmaps Con Contraste U Opacidad
Publicado por: JuanK en Viernes 14 de Diciembre de 2007, 18:53
buenisimo! interesante averiguar algo del trasfondo.