AYUDA!! Interface en Visual studio con transparencia degradada.

Iniciado por xustyx, 2 Noviembre 2012, 18:27 PM

0 Miembros y 1 Visitante están viendo este tema.

xustyx

Buenas a todos!

Pues me gustaría comentaros que estoy probando de crear una interfaz degradada con visual estudio y no lo consigo :S

Primeramente con gimp genero el archivo en PNG con su degradado correspondiente y se ve bien, pero a la hora de ponerlo en visual Studio y ejecutarlo las transparencias se ven acartonadas XD mas o menos no se como explicarlo.

Aquí va un trozo de código para explicarme mejor.
Código (csharp) [Seleccionar]

this.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("$this.BackgroundImage"))); //Aqui pongo la imagen.
this.BackColor = System.Drawing.Color.GreenYellow; //Cojo el tipico color verdoso de fondo.
this.TransparencyKey = System.Drawing.Color.GreenYellow; //Y lo pongo como clave de transparencia...


Bueno al ejecutarlo como es lógico el verde se vuelve transparente pero el problema esta en los bordes y en una transparencia degradada que no me la coje ...

No se si me entenderéis pero lo que quiero hacer por ejemplo que lo que tenga nivel 100% de ese verde sea 100% transparente y lo que este un poco mezclado debido al degradado de transparencia también se degrade pero proporcionalmente.

Muchas gracias y nos vemos :)

--------------------------------------------------------------------------------
Para que os hagais una idea esto es lo que pasa...
La primera es en el gimp creada, la segunda es cuando ejecuto la aplicacion, y la tercera es como quiero que se vea digamos difuminada la transparecia.




Como podeis ver, el verde del cuadrado sí que se quita, pero al mezclarse con la semitransparencia del naranja el color cambia y no lo detecta como transparente... y así queda.

--------------------------------------------------------------------------------
Me estaba preguntando si podria cojer la imagen de fondo y una imagen del mismo tamaño con un gradiente blanco y negro y decirle que contra mas negro sea menos opaco es y sobreponerlas o algo asi :S

--------------------------------------------------------------------------------
Bueno estoy probando ahora con XAML(WPF) Con expression Blend ahora os contaré si lo consigo que parece que sí

[MOD] No hagas cuadruple post.....usa el botón "modificar" para añadir comentarios, Gracias.

Keyen Night

#1
Los colores ARGB, poseen el canal Alpha para las transparencias puedes jugar con el evento Paint e ir disminuyendo Alpha...

Código (vb.net) [Seleccionar]
   'Guardara la posición vertical (en el eje Y donde dibujamos la linea)
   Dim vertical As Integer = 0

   'Guarda el avance en el degradado
   Dim pasoAlpha As Double

   'Guarda el valor de Alpha
   Dim alpha As Double = 255

   Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

       '255 es el valor maximo de Alpha (Byte)'
       'dividimos entre el alto del Form para
       'saber cuanto debemos restar a Alpha en
       'cada linea que dibujemos
       pasoAlpha = 255 / (Me.Height - 1)

       'Mientras que no nos pasemos de los limites del Form y Alpha se valido
       While vertical < Me.Height And alpha > 0

           'Dibujamos la linea
           e.Graphics.DrawLine(New Pen(Color.FromArgb(alpha, _
                                                      Color.GreenYellow.R, _
                                                      Color.GreenYellow.G, _
                                                      Color.GreenYellow.B)), _
                                                      0, vertical, _
                                                      Me.Width - 1, vertical)
           'Avanzamos uno hacia abajo (eje Y)
           vertical += 1

           'Degradamos otro paso
           alpha -= pasoAlpha

       End While

   End Sub


Claro el GDI+ de Visual Studio es muy potente y puedes hacerlo también de formas más fáciles...

Código (vb.net) [Seleccionar]
Imports System.Drawing.Drawing2D

Public Class Form1

    Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint

        Dim Rectángulo As Rectangle = New Rectangle(0, 0, Me.Width, Me.Height)

        Dim Brocha As New LinearGradientBrush(Rectángulo, Color.Red, Color.Green, LinearGradientMode.Vertical)

        e.Graphics.FillRectangle(Brocha, Rectángulo)

    End Sub

End Class


Y aquí están las sobrecargas del constructor de LinearGradientBrush

http://msdn.microsoft.com/es-es/library/system.drawing.drawing2d.lineargradientbrush.lineargradientbrush%28v=vs.80%29.aspx
La Fé Mueve Montañas...
                                    ...De Dinero

La programación es más que un trabajo es más que un hobby es una pasión...