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

Establecer un color tranparente a un BMP

Estas en el tema de Establecer un color tranparente a un BMP en el foro de .NET en Foros del Web. Buenas, llevo dias intentando crear una imagen con fondo tranaprente (de un colorkey) a partir de un bmp. Lo que he hecho es cargar el ...
  #1 (permalink)  
Antiguo 24/06/2009, 02:52
 
Fecha de Ingreso: abril-2007
Mensajes: 82
Antigüedad: 17 años
Puntos: 0
Establecer un color tranparente a un BMP

Buenas, llevo dias intentando crear una imagen con fondo tranaprente (de un colorkey) a partir de un bmp.

Lo que he hecho es cargar el bmp con un fondo azul en un picturebox, y en el evento paint tratarlo y finalmente pasarlo a un segundo picturebox pero ya con el fondo transparente... pero no hay manera >_<

Espero que me puedan ayudar!!

Código:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.PictureBox1.Image = Image.FromFile(Application.StartupPath & "\rock.bmp")
    End Sub

    Private Sub PictureBox1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles PictureBox1.Paint
        Try
            Dim bmp As Bitmap
            Dim bmpFinal As Bitmap
            Dim g As Graphics

            bmp = Me.PictureBox1.Image
            bmpFinal = New Bitmap(bmp.Width, bmp.Height)
            bmpFinal.MakeTransparent()

            g = Graphics.FromImage(bmpFinal)

            Dim attr As New ImageAttributes

            attr.SetColorKey(Color.Blue, Color.Blue)

            Dim dstRect As New Rectangle(0, 0, bmp.Width, bmp.Height)
            e.Graphics.DrawImage(bmp, dstRect, 0, 0, bmp.Width, bmp.Height, GraphicsUnit.Pixel, attr)

            'g.Dispose()
            'g.Save()

            Me.PictureBox2.Image = bmpFinal

        Catch ex As Exception
            Call MsgBox("Error: " & ex.Message & vbNewLine & "Traza: " & ex.StackTrace)
        End Try
    End Sub
Mi objetivo final es coger un archivo bmp de mi disco, y crear un gif con fondo transparente pasandole el colorkey (color de fondo), por si saben de alguna manera mas sencilla.

Saludos y espero que me puedan ayudar!
  #2 (permalink)  
Antiguo 24/06/2009, 10:42
Avatar de RootK
Moderador
 
Fecha de Ingreso: febrero-2002
Ubicación: México D.F
Mensajes: 8.004
Antigüedad: 22 años, 2 meses
Puntos: 50
Respuesta: Establecer un color tranparente a un BMP

Solo basta con éstos 3 pasos

http://www.codeguru.com/csharp/.net/...icle.php/c4661

u otra alternativa

http://www.codedblog.com/2007/08/28/...image-using-c/

Salu2
__________________
Nadie roba nada ya que en la vida todo se paga . . .

Exentrit - Soluciones SharePoint & Net
  #3 (permalink)  
Antiguo 25/06/2009, 03:13
 
Fecha de Ingreso: abril-2007
Mensajes: 82
Antigüedad: 17 años
Puntos: 0
Respuesta: Establecer un color tranparente a un BMP

Cita:
Iniciado por RootK Ver Mensaje
El primer punto me viene perfecto, despues he querido añadir un CompanyLogo.Image.save() para guardar esa imagen con la transparencia.

Como seria para guardarlo en gif? Podeis ehcarme una mano??

Saludos y muchas gracias!
  #4 (permalink)  
Antiguo 25/06/2009, 06:25
 
Fecha de Ingreso: abril-2007
Mensajes: 82
Antigüedad: 17 años
Puntos: 0
Respuesta: Establecer un color tranparente a un BMP

Bueno, ya esta solucionado, hay un problema con guardarlo con el imageformat.gif, pongo como NO se tiene que hacer y como Si se tiene que hacer.

El ejemplo utiliza 2 picturebox un boton 'cmdTransformar' y una imagen bmp con el fondo azul.

COMO NO HACERLO:

Tal y como se hace este ejemplo se guarda en gif pero con fondo negro pese haberlo puesto transparente y guardarlo con imageformat.gif.
Código:
Imports System.Drawing.Imaging
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.PictureBox1.Image = Bitmap.FromFile("rock.bmp")

    End Sub


    Private Sub cmdTransformar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdTransformar.Click
        Dim imgObjeto As Bitmap = New Bitmap(Me.PictureBox1.Image)
        Try
            imgObjeto.MakeTransparent(Color.Blue)

            Me.PictureBox2.Image = imgObjeto


            Me.PictureBox2.Image.Save("rock.gif", ImageFormat.Gif)

        Catch ex As Exception
            Call MsgBox("Error: " & ex.Message & vbNewLine & "Traza: " & ex.StackTrace)
        End Try
    End Sub
End Class

Como SI hacerlo:

Simplemente se le quita el parametro imageformat.gif al guardarlo y funciona perfectamente:
Código:
Imports System.Drawing.Imaging
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.PictureBox1.Image = Bitmap.FromFile("rock.bmp")

    End Sub


    Private Sub cmdTransformar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdTransformar.Click
        Dim imgObjeto As Bitmap = New Bitmap(Me.PictureBox1.Image)
        Try
            imgObjeto.MakeTransparent(Color.Blue)

            Me.PictureBox2.Image = imgObjeto

            Me.PictureBox2.Image.Save("rock.gif")

        Catch ex As Exception
            Call MsgBox("Error: " & ex.Message & vbNewLine & "Traza: " & ex.StackTrace)
        End Try
    End Sub
End Class
Gracias por la ayuda RootK y espero que este codigo le sirva a mas gente.

Saludos.

PD. maldito imageformat......
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 12:30.