Foros del Web » Programación para mayores de 30 ;) » .NET »

Guardar Bitmaps con contraste u opacidad

Estas en el tema de Guardar Bitmaps con contraste u opacidad en el foro de .NET en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 11/12/2007, 18:30
Avatar de kalixe985  
Fecha de Ingreso: junio-2006
Ubicación: Colombiano viviendo en Es
Mensajes: 73
Antigüedad: 17 años, 10 meses
Puntos: 0
Pregunta Guardar Bitmaps con contraste u opacidad

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!!!
  #2 (permalink)  
Antiguo 12/12/2007, 02:28
Avatar de andriuch  
Fecha de Ingreso: abril-2004
Mensajes: 65
Antigüedad: 20 años
Puntos: 0
Re: Guardar Bitmaps con contraste u opacidad

Coge el photoshop y hazte las dos imagenes, es lo mas sencillo, yo siempre lo he hecho asi.

Si lo quieres hacer mediante código, se puede hacer cambiando la clase css de la imagen, para cambiar la opacidad de un objeto mediante css se hace con lo siguiente:

.transparencia{
filter:alpha(opacity=70);
opacity:0.7;
}

Así, el objeto que contenga esta clase, se vera al 70%, espero que te sirva.

Un saludo.
  #3 (permalink)  
Antiguo 12/12/2007, 16:08
Avatar de kalixe985  
Fecha de Ingreso: junio-2006
Ubicación: Colombiano viviendo en Es
Mensajes: 73
Antigüedad: 17 años, 10 meses
Puntos: 0
Sonrisa Re: Guardar Bitmaps con contraste u opacidad

Cita:
Iniciado por andriuch Ver Mensaje
Coge el photoshop y hazte las dos imagenes, es lo mas sencillo, yo siempre lo he hecho asi.

Si lo quieres hacer mediante código, se puede hacer cambiando la clase css de la imagen, para cambiar la opacidad de un objeto mediante css se hace con lo siguiente:

.transparencia{
filter:alpha(opacity=70);
opacity:0.7;
}

Así, el objeto que contenga esta clase, se vera al 70%, espero que te sirva.

Un saludo.
Hola!!!
Gracias por responder. Lo del PhotoShop estaría bien, pero tiene que hacerlo mi aplicación. Lo de la clase css no lo acabo de entender. ¿Qué es? ¿Te refieres hojas de estilo en cascada (CSS)? En mi caso la aplicación es Windows Forms, no una aplicación web. ¿Sabes cómo se podría hacer con C# para Windows Forms?

Gracias de antemano y saludos!!!!
  #4 (permalink)  
Antiguo 12/12/2007, 17:13
Avatar de andriuch  
Fecha de Ingreso: abril-2004
Mensajes: 65
Antigüedad: 20 años
Puntos: 0
Re: Guardar Bitmaps con contraste u opacidad

Perdona tio, no sabia que era un windows form, si que me referia a una hoja de estilos, lo q te digo del photoshop es que te hagas las 2 imagenes, y con la aplicacion cambies de una a otra, cambiando el src en un evento, pero eso no se si es posible en un windows form, casi no he trabajado con aplicaciones windows, solo web, entonces no se muy bien si eso se puede hacer.


saludos.
  #5 (permalink)  
Antiguo 13/12/2007, 04:24
Avatar de kalixe985  
Fecha de Ingreso: junio-2006
Ubicación: Colombiano viviendo en Es
Mensajes: 73
Antigüedad: 17 años, 10 meses
Puntos: 0
De acuerdo Re: Guardar Bitmaps con contraste u opacidad

Cita:
Iniciado por andriuch Ver Mensaje
Perdona tio, no sabia que era un windows form, si que me referia a una hoja de estilos, lo q te digo del photoshop es que te hagas las 2 imagenes, y con la aplicacion cambies de una a otra, cambiando el src en un evento, pero eso no se si es posible en un windows form, casi no he trabajado con aplicaciones windows, solo web, entonces no se muy bien si eso se puede hacer.


saludos.
Tranquilo, no pasa nada. Al final, mirando por la web, parece que hay formas de hacerlo, pero es modificando cada pixel de la imagen y no sé si valga la pena hacerlo, por rendimiento, más que nada, ya que son varias imágenes y si todas las tengo que recorrer pixel por pixel.....

Gracias por tu respuesta, salu2!!!!
  #6 (permalink)  
Antiguo 14/12/2007, 10:54
Avatar de kalixe985  
Fecha de Ingreso: junio-2006
Ubicación: Colombiano viviendo en Es
Mensajes: 73
Antigüedad: 17 años, 10 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!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:03.