• Domingo 22 de Diciembre de 2024, 15:48

Autor Tema:  Guardar Bitmaps Con Contraste U Opacidad  (Leído 1966 veces)

kalixe985

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
Guardar Bitmaps Con Contraste U Opacidad
« en: Miércoles 12 de Diciembre de 2007, 01:29 »
0
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!!!

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Guardar Bitmaps Con Contraste U Opacidad
« Respuesta #1 en: Jueves 13 de Diciembre de 2007, 02:16 »
0
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...
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

kalixe985

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
Re: Guardar Bitmaps Con Contraste U Opacidad
« Respuesta #2 en: Jueves 13 de Diciembre de 2007, 11:21 »
0
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!!!

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Guardar Bitmaps Con Contraste U Opacidad
« Respuesta #3 en: Jueves 13 de Diciembre de 2007, 15:13 »
0
pues si quieres hacerlo ... adelante...

paso 1: los algoritmos de contraste y brillo:

http://www.developerfusion.co.uk/show/5441/
http://www.developerfusion.co.uk/show/5441/3/

paso2: has la implementación...


puedes hacerla usando punteros en contextos unsafe... tal como te lo propusieron en msdn o mejor aun puedes usar Bitmap.Lockbits y Marshal
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

kalixe985

  • Miembro activo
  • **
  • Mensajes: 33
    • Ver Perfil
Re: Guardar Bitmaps Con Contraste U Opacidad
« Respuesta #4 en: Viernes 14 de Diciembre de 2007, 17:55 »
0
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
  1. float[][] colorMatrixPoints = new float[][] {
  2.  
  3.                 new float[]{r,  0,   0,   0,  0},
  4.                 new float[]{0,  g,   0,  0,  0},
  5.                 new float[]{0,  0,   b,  0,  0},
  6.                 new float[]{0,  0,   0,  a,  0},
  7.                 new float[]{t1, t2, t3, t4, 1}
  8.  
  9.             };
  10.  


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
  1.     ColorMatrix cm = new ColorMatrix(colorMatrixPoints);
  2.     ImageAttributes imgAttr = new ImageAttributes();
  3.     imgAttr.SetColorMatrix(cm);
  4.  

Ahora solo nos queda dibujar la imagen original en una nueva imagen aplicandole el ImageAttributes que hemos creado previamente:


Código: Text
  1.  //Se supone que la imagen original está cargada en un Bitmap llamado Source
  2.     Bitmap bmpdest = new Bitmap(Source.Width, Source.Height, Source.PixelFormat);
  3.     Graphics g = Graphics.FromImage(bmpdest);
  4.     g.DrawImage(Source, new Rectangle(Point.Empty, bmpdest.Size), 0, 0, Source.Width, Source.Height, GraphicsUnit.Pixel, imgAttr);
  5.     g.Dispose();
  6.     imgAttr.Dispose();
  7.  

Y con esto ya tienes tu imagen lista para salvar con el contraste y el brillo modificado.
DR GUSMAN.  "


Gracias y saludos!!!

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Guardar Bitmaps Con Contraste U Opacidad
« Respuesta #5 en: Viernes 14 de Diciembre de 2007, 18:53 »
0
buenisimo!
interesante averiguar algo del trasfondo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io