none
como guardar un control como imagen

    Pregunta

  • buenas tardes a todos, tengo una pregunta ¿como guardar un control en el equipo como una imagen?

    tengo este codigo pero no funciona 

    Dim bitm As New Bitmap(NivelInicial.Width, NivelInicial.Height)
            NivelInicial.DrawToBitmap(bitm, New Rectangle(0, 0, NivelInicial.Width, NivelInicial.Height))
            bitm.Save("C:\imagenbitmap.bmp")

    ademas tambien quisiera saber si tengo que hacer alguna conversion para guardarla como gif o jpg 

    y tambien ¿hay algún metodo para guardar archivos temporales? lo que normalmente hago es guardar el archivo en mis documentos y despues de utilizarlo lo elimino pero no creo que esa sea la manera correcta de hacerlo.

    martes, 6 de septiembre de 2016 18:59

Respuestas

  • Hola RHCRD,

    [-] ... ¿como guardar un control en el equipo como una imagen?, tengo este código pero no funciona 

    Mencionas que no funciona, te muestra algún error ?

    Te recomendaría no guardarlo en C:/ ya que puede que necesites permisos.

     Try
        Dim bitm As New Bitmap(NivelInicial.Width, NivelInicial.Height)
        NivelInicial.DrawToBitmap(bitm, New Rectangle(0, 0, NivelInicial.Width, NivelInicial.Height))
    
        bitm.Save("D:\imagenbitmap.jpg", ImageFormat.Jpeg)
    
        MessageBox.Show("Imagen creada")
    
     Catch ex As Exception
         MessageBox.Show(ex.Message)
     End Try

    Puedes usar el ImageFormat para agregar el tipo formato, sólo tendrías que agregar su respectivo import.

    Imports System.Drawing.Imaging

    Resultado: (En este caso mandé un DateTimePicker)

    [-] ... hay algún metodo para guardar archivos temporales?

    Esos los creas en la aplicación? Qué guardas en ellos, realmente son necesarios ?

    Prueba y comentas como te va.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta RHCRD miércoles, 7 de septiembre de 2016 0:30
    martes, 6 de septiembre de 2016 19:38
  • Hola RHCRD,

    [-] ... recuerdo que si la aplicacion no tiene permisos para escribir en alguna carpeta manda un error similar a unauthorized exception o algo asi ..

    Anda a tu carpeta bin/Debug el .exe que te genera ejecútalo como administrador, ahí si permite.

    [-] ... ¿que deberia hacer con esa imagen o en donde debo de guardarla?

    Si es un archivo temporal, porqué no guardarlo en Temporales ?

    Para obtener el path puedes usar :

    Dim temporales As String = Path.GetTempPath

    Aunque mejor sería crear una carpeta y almacenarla ahí, luego solo eliminarías la carpeta.

    Private Sub drawControl(ByVal ctrl As Control,
                            ByVal name As String)
            Try
                Dim rutaTempApp As String = Path.Combine(Path.GetTempPath, "MiApp")
    
                If Not Directory.Exists(rutaTempApp) Then
                    Directory.CreateDirectory(rutaTempApp)
                End If
    
                Using bitm As New Bitmap(ctrl.Width, ctrl.Height)
                    ctrl.DrawToBitmap(bitm, New Rectangle(0, 0, ctrl.Width, ctrl.Height))
                    bitm.Save(Path.Combine(rutaTempApp, String.Format("{0}.jpg", name)), ImageFormat.Jpeg)
                End Using
    
                MessageBox.Show("Imagen creada")
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    Dónde lo llamo de la siguiente forma :

       Dim nombre As String = "imagenbitmap"
       drawControl(Button2, nombre)

    Resultado :

    [-] ... quiero cambiar el fondo del control por una transparencia y guardarla como gif

    La verdad nos sabría decirte, si te das cuenta la imagen no tiene fondo, este viene dibujada tal y como es en el formulario.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta RHCRD miércoles, 7 de septiembre de 2016 0:30
    martes, 6 de septiembre de 2016 23:29

Todas las respuestas

  • Hola RHCRD,

    [-] ... ¿como guardar un control en el equipo como una imagen?, tengo este código pero no funciona 

    Mencionas que no funciona, te muestra algún error ?

    Te recomendaría no guardarlo en C:/ ya que puede que necesites permisos.

     Try
        Dim bitm As New Bitmap(NivelInicial.Width, NivelInicial.Height)
        NivelInicial.DrawToBitmap(bitm, New Rectangle(0, 0, NivelInicial.Width, NivelInicial.Height))
    
        bitm.Save("D:\imagenbitmap.jpg", ImageFormat.Jpeg)
    
        MessageBox.Show("Imagen creada")
    
     Catch ex As Exception
         MessageBox.Show(ex.Message)
     End Try

    Puedes usar el ImageFormat para agregar el tipo formato, sólo tendrías que agregar su respectivo import.

    Imports System.Drawing.Imaging

    Resultado: (En este caso mandé un DateTimePicker)

    [-] ... hay algún metodo para guardar archivos temporales?

    Esos los creas en la aplicación? Qué guardas en ellos, realmente son necesarios ?

    Prueba y comentas como te va.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta RHCRD miércoles, 7 de septiembre de 2016 0:30
    martes, 6 de septiembre de 2016 19:38
  • hola Joel C. Naupa Crispín Tenias razon, creo que era por guardar directamente en C: el error que me daba era error generico GDI y no tenia mas información aun que me parece extraño recuerdo que antes si podia guardar directamente en C: pero no en las subcarpetas y recuerdo que si la aplicacion no tiene permisos para escribir en alguna carpeta manda un error similar a unauthorized exception o algo asi, aun que tal vez tambien podria ser que me faltara darle formato bmp o jpg.

    para la parte de guardar archivos temporales es precisamente para la imagen, quiero guardar el control como imagen en el disco para despues poder agregarla a un archivo de excel por que al parecer no puedo pasar directamente un mapa de bits a excel asi que tengo que guardarla y despues agregarla pero una vez que cierro el excel no necesito mas la imagen, ¿que deberia hacer con esa imagen o en donde debo de guardarla?

    y tambien, es posible guardar una imagen con una trasparencia? esto no es necesario pero quiero saber si se puede hacer, quiero cambiar el fondo del control por una transparencia y guardarla como gif


    • Editado RHCRD martes, 6 de septiembre de 2016 22:53
    martes, 6 de septiembre de 2016 20:56
  • Hola RHCRD,

    [-] ... recuerdo que si la aplicacion no tiene permisos para escribir en alguna carpeta manda un error similar a unauthorized exception o algo asi ..

    Anda a tu carpeta bin/Debug el .exe que te genera ejecútalo como administrador, ahí si permite.

    [-] ... ¿que deberia hacer con esa imagen o en donde debo de guardarla?

    Si es un archivo temporal, porqué no guardarlo en Temporales ?

    Para obtener el path puedes usar :

    Dim temporales As String = Path.GetTempPath

    Aunque mejor sería crear una carpeta y almacenarla ahí, luego solo eliminarías la carpeta.

    Private Sub drawControl(ByVal ctrl As Control,
                            ByVal name As String)
            Try
                Dim rutaTempApp As String = Path.Combine(Path.GetTempPath, "MiApp")
    
                If Not Directory.Exists(rutaTempApp) Then
                    Directory.CreateDirectory(rutaTempApp)
                End If
    
                Using bitm As New Bitmap(ctrl.Width, ctrl.Height)
                    ctrl.DrawToBitmap(bitm, New Rectangle(0, 0, ctrl.Width, ctrl.Height))
                    bitm.Save(Path.Combine(rutaTempApp, String.Format("{0}.jpg", name)), ImageFormat.Jpeg)
                End Using
    
                MessageBox.Show("Imagen creada")
    
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
        End Sub

    Dónde lo llamo de la siguiente forma :

       Dim nombre As String = "imagenbitmap"
       drawControl(Button2, nombre)

    Resultado :

    [-] ... quiero cambiar el fondo del control por una transparencia y guardarla como gif

    La verdad nos sabría decirte, si te das cuenta la imagen no tiene fondo, este viene dibujada tal y como es en el formulario.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Marcado como respuesta RHCRD miércoles, 7 de septiembre de 2016 0:30
    martes, 6 de septiembre de 2016 23:29