[AYUDA]Crear skin con imagen png/bitmap/jpeg(GDI+)

Iniciado por Kyan, 11 Septiembre 2014, 15:56 PM

0 Miembros y 3 Visitantes están viendo este tema.

Kyan

Hola, soy nuevo en el foro y necesito ayuda, lo que quiero es si me podrían ayudar... recientemente cree un skin/tema para mi programa mediante photoshop pero no se como ponerlo, lo que yo quiero es poner esa imagen de photoshop como si fuera la form... no se si me explico... Gracias a todos.. :-X

XresH

Podrias ponerle la propiedad del form

Código (vb) [Seleccionar]
BorderStyle = 0

y luego implementar tu fondo en

Código (vb) [Seleccionar]
Me.Picture = App.Path & "\nombrefoto.Jpg"

o bien podes realizarlo en modo de diseño.

Si haces esto tenes que manipular algunas apis en conjunto para lograr el arrastre de la ventana desde alguna parte de tu imagen porque al ponerle el estilo de borde en 0 no vas a poder mover el form sin aplicar codigo.

Saludos.
[ - Si eres programador y quieres que tus proyectos esten en mi blog(con o sin source), consúltame! - ]
Entra A Mi Blog De Programación | | Dudas en este post :| | >>Clic para ir al Post<<

Kyan

#2
Lo hice en modo diseño y tengo el codigo para moverlo, el problema es que siendo una imagen png en el visual studio 2013 no deja poner el fondo transparente por lo tanto lo que deberia ser transparente se ve blanco... Ahora probare con el visual studio 2010 haber si me deja poner esa opcion... PD: los codigos que me diste como los aplicaria en el codigo... Pongo #Region "Themebase"                                                           Aqui la base de aeonshack                                                               #EndRegion.                                                                                          Y tu codigo, no necesito nada mas?

XresH

Como esta en visual basic, asumi que era en Vb6, en Vb.NET (actualmente uso 2012, en el 2010 creo que era igual)

La propiedad de tu imagen en modo diseño es en


Código (vbnet) [Seleccionar]
BackGroundImage

Ahi colocas la imagen que hiciste.

Para "desaparecer" los botones y dejar el form completamente sin bordes ni nada usa


En form load (tambien modificas en modo diseño, como gustes)

Código (vbnet) [Seleccionar]
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None

Si mal no recuerdo con esas propiedades dejas el Form sin nada con tu imagen en el.

Saludos.
[ - Si eres programador y quieres que tus proyectos esten en mi blog(con o sin source), consúltame! - ]
Entra A Mi Blog De Programación | | Dudas en este post :| | >>Clic para ir al Post<<

Kyan

Cita de: XresH en 12 Septiembre 2014, 06:27 AM
Como esta en visual basic, asumi que era en Vb6, en Vb.NET (actualmente uso 2012, en el 2010 creo que era igual)

La propiedad de tu imagen en modo diseño es en


Código (vbnet) [Seleccionar]
BackGroundImage

Ahi colocas la imagen que hiciste.

Para "desaparecer" los botones y dejar el form completamente sin bordes ni nada usa


En form load (tambien modificas en modo diseño, como gustes)

Código (vbnet) [Seleccionar]
Me.FormBorderStyle = Windows.Forms.FormBorderStyle.None

Si mal no recuerdo con esas propiedades dejas el Form sin nada con tu imagen en el.

Saludos.


Si los bordes tambien se pueden quitar desde la configuracion la cosa es que con una imagen png quede lo que era transparente en photoshop transparente en visual studio... porque me queda blanco.

XresH

A ver si este código te funciona, lo tengo en un proyecto que la imagen tiene una forma distinta (a la de los form tradicionales) pero no posee partes transparentes, fijate si te sirve para lo que necesitas, de lo contrario podrias intentar codearlo para que haga lo que decis, en este caso coloco una imagen y el form adapta la forma de la misma, el code no lo hice yo y no recuerdo de donde lo saque ya que fue hace mucho tiempo:

Código (vbnet) [Seleccionar]
Public Class Form1
    Inherits System.Windows.Forms.Form
    Dim Arrastre As Boolean
    Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim imagen As Image = Bitmap.FromFile("C:\url.jpg")
        Me.BackgroundImage = imagen
        Me.Height = imagen.Height
        Me.Width = imagen.Width
        Dim mibitmap As Bitmap = CType(imagen, Bitmap)
        Me.Region = ObtenerRegionDelBitmap(mibitmap, mibitmap.GetPixel(0, 0))
    End Sub
    Private Function ObtenerRegionDelBitmap(ByVal MiImagen As Bitmap, ByVal ColorTransparente As Color) As Region
        Dim RegionLocal As Region
        If MiImagen Is Nothing Then Return RegionLocal
        Dim ColorDeFondo As Color = ColorTransparente
        Dim Largo As Integer = MiImagen.Height - 1
        Dim Ancho As Integer = MiImagen.Width
        Dim Fila As Integer
        Dim Columna As Integer
        RegionLocal = New Region(New Rectangle(0, 0, 0, 0))
        For Fila = 0 To Largo
            Dim ColumnaComienzo As Integer = -1
            Dim ColumnaFin As Integer = -1
            For Columna = 0 To Ancho
                If Columna = Ancho Then
                    If ColumnaComienzo <> -1 Then
                        ColumnaFin = Columna
                        Dim regUnion As New Region(New Rectangle(ColumnaComienzo, Fila, ColumnaFin - ColumnaComienzo, 1))
                        RegionLocal.Union(regUnion)
                        regUnion = Nothing
                    End If
                Else
                    If Not MiImagen.GetPixel(Columna, Fila).Equals(ColorDeFondo) Then
                        If ColumnaComienzo = -1 Then ColumnaComienzo = Columna
                    ElseIf MiImagen.GetPixel(Columna, Fila).Equals(ColorDeFondo) Then
                        If ColumnaComienzo <> -1 Then
                            ColumnaFin = Columna
                            Dim regUnion As New Region(New Rectangle(ColumnaComienzo, Fila, ColumnaFin - ColumnaComienzo, 1))
                            RegionLocal.Union(regUnion)
                            regUnion = Nothing
                            ColumnaComienzo = -1
                            ColumnaFin = -1
                        End If
                    End If
                End If
            Next
        Next
        Return RegionLocal
    End Function
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
        Arrastre = True
    End Sub
    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
        Arrastre = False
    End Sub
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
        If Arrastre Then Me.Location = Me.PointToScreen(New Point(e.X, e.Y))
    End Sub
End Class


El unico parametro que tenes que modificar es el de la ubicacion del archivo en cuestion:

Código (vbnet) [Seleccionar]
Dim imagen As Image = Bitmap.FromFile("C:\url.jpg")

Despues si tenes distinto el nombre del form bueno eso esta demas decirlo.

Espero te sirva.
[ - Si eres programador y quieres que tus proyectos esten en mi blog(con o sin source), consúltame! - ]
Entra A Mi Blog De Programación | | Dudas en este post :| | >>Clic para ir al Post<<

Kyan

Casi casi, ahora se ve transparente pero puse la url de la imagen pero se siguen biendo pequeñas partes donde no es transparente el fondo, es blanco´...

Te mando una imagen..(la imagen es png)

LeandroA

Hola, ante todo y me gustaría la opinión de otros moderadores u otros usuarios, los temas de .net irían en esta sección

tomando el hilo del tema, no se mucho de .net pero recuerdo alguna vez que tenia una propiedad para hacer esto, al margen de esto es lo mismo que hacerlo con el api SetLayeredWindowAttributes
ahora sea con SetLayeredWindowAttributes  o con Regiones, no te va a quitar esos bordes porque no son blancos, quitandolos no queda muy lindo ya que te va a quedar todo muy pixelado, y las sombras inferiores olvídate.

para hacer un skin de este tipo tenes que recurrir a el api UpdateLayeredWindow, si la googleas con vas a encontrar ejemplos para .net