none
Cuando subo una imagen a un picturebox a los segundos se pone en blanco

    Pregunta

  • Hola! Muy Buenos dias! , he aqui mi problema , lo que pasa es que estoy desarrollando un programa estilo paint, pero cuando quiero abrir una imagen, independientemente la extension o tipo que sea, a los segundos como si me carga la pagina en blanco como hoja nueva y la verdad no se que hize mal :( 

    Aqui les dejo mi codigo principal

    Public Class MiniPaint
    
        Dim guardar As String = ""
        Dim bmp As New Bitmap(1024, 768)
    
    
        Private Sub Hoja_MouseMove(sender As Object, e As MouseEventArgs) Handles Hoja.MouseMove
            Imagen()
            If rdLapiz.Checked Then
    
                If e.Button = MouseButtons.Left Then
                    Graficos.DrawLine(Lapiz, Punto.X, Punto.Y, e.X, e.Y)
                End If
                Punto = e.Location
    
            ElseIf rdPincel.Checked Then
                If e.Button = MouseButtons.Left Then
                    Graficos.DrawLine(Pincel, Punto.X, Punto.Y, e.X, e.Y)
                End If
                Punto = e.Location
    
            ElseIf rdBorrar.Checked Then
                If e.Button = MouseButtons.Left Then
                    Borrador.Width = 5.0F
                    Graficos.DrawRectangle(Borrador, e.X, e.Y, 15, 15)
    
                End If
                Punto = e.Location
    
            End If
        End Sub
    
        Private Sub btnColor_Click(sender As Object, e As EventArgs) Handles btnColor.Click
            If ColorDialog1.ShowDialog = DialogResult.OK Then
                Lapiz.Color = ColorDialog1.Color
                Pincel.Color = ColorDialog1.Color
            End If
    
        End Sub
    
        Private Sub InfoToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles InfoToolStripMenuItem.Click
            MsgBox("Hecho Por: Enrique Joya Miramontes", MsgBoxStyle.Information, "Informacion Importante")
        End Sub
    
        Private Sub CerrarProgramaToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles CerrarProgramaToolStripMenuItem.Click
            Me.Close()
        End Sub
    
        Private Sub Hoja_MouseClick(sender As Object, e As MouseEventArgs) Handles Hoja.MouseClick
    
            Imagen()
            If rdLapiz.Checked Then
                Graficos.DrawLine(Lapiz, Punto.X, Punto.Y, e.X, e.Y)
    
            ElseIf rdCuadrado.Checked Then
    
                Graficos.DrawRectangle(Pincel, e.X, e.Y, 50, 50)
    
            ElseIf rdRectangulo.Checked Then
                Graficos.DrawRectangle(Pincel, e.X, e.Y, 150, 100)
    
            ElseIf rdCirculo.Checked Then
                Graficos.DrawEllipse(Pincel, e.X, e.Y, 120, 120)
            ElseIf rdBote.Checked Then
    
    
            End If
    
        End Sub
    
        Private Sub btnBorrar_Click(sender As Object, e As EventArgs) Handles btnBorrar.Click
            Graficos = Graphics.FromImage(bmp)
            Graficos.Clear(Color.White)
            Imagen()
        End Sub
    
        Private Sub Tamano_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Tamano.SelectedIndexChanged
            Pincel.Width = Tamano.SelectedItem
        End Sub
    
        Private Sub opcAbrir_Click(sender As Object, e As EventArgs) Handles opcAbrir.Click
    
            'Propiedades del OpenFileDialog
            OpenFileDialog1.Title = "Abrir Imagen..."
            OpenFileDialog1.InitialDirectory = "C:\"
            OpenFileDialog1.RestoreDirectory = "true"
            OpenFileDialog1.Filter = "Archivo JPG|*.jpg|Archivo PNG|*.png|Archivo GIF|*.gif|Todos los archivos|*.*"
            OpenFileDialog1.FileName = ""
    
            Imagen()
    
            'Procedimiento
            OpenFileDialog1.ShowDialog()
            If OpenFileDialog1.FileName > "" Then
                Hoja.ImageLocation = OpenFileDialog1.FileName
    
            End If
        End Sub
    
        Sub Imagen()
            Graficos = Graphics.FromImage(bmp)
            Me.Hoja.Image = bmp
        End Sub
    
        Private Sub opcGuardar_Click(sender As Object, e As EventArgs) Handles opcGuardar.Click
    
            'Propiedades del SaveFileDialog
            SaveFileDialog1.Title = "Guardar imagen..."
            SaveFileDialog1.Filter = "Archivo JPG|*.jpg|Archivo PNG|*.png|Archivo GIF|*.gif|Todos los archivos|*.*"
            SaveFileDialog1.FilterIndex = 0
            SaveFileDialog1.InitialDirectory = "C:\Documents and Settings\"
            SaveFileDialog1.RestoreDirectory = "True"
            SaveFileDialog1.FileName = ""
    
            'Procedimiento
            If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
    
                If SaveFileDialog1.FileName > "" Then
                    guardar = SaveFileDialog1.FileName
                    bmp.Save(guardar)
    
                End If
            End If
    
            Graficos.Clear(Color.White)
            Imagen()
            guardar = ""
    
        End Sub
    
        Private Sub MiniPaint_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    
            rdLapiz.Checked = True
            Graficos = Graphics.FromImage(bmp)
            Graficos.Clear(Color.White)
            Imagen()
    
        End Sub
    End Class

    y el modulo de variables que use

    Module Variables
    
        'Variables :)
    
        Public Lapiz As New Pen(Brushes.Black)
        Public Graficos As Graphics
        Public Punto As Point
        Public down As Boolean = False
        Public pintar As Boolean = False
        Public Pincel As New Pen(Brushes.Black)
        Public Borrador As New Pen(Brushes.White)
        Public tama As Integer
        Public dibujo As New Drawing2D.GraphicsPath(Drawing2D.FillMode.Alternate)
    
    End Module
    

    Nota: La variable "Hoja" viene siendo el picture box que tengo en el formulario

    domingo, 27 de noviembre de 2016 4:56

Respuestas

  • Por lo que veo, Estás usando un picturebox llamado Image y usas por separado un bitmap en el que vas pintando lo extraes del picturebox. Esto no funcionará bien. El sistema repinta automáticamente el Picturebox cada vez que le viene bien, por ejemplo, al mover o redimensionar el formulario, o al pasar otra por encima, unas veces si y otras no. No puedes confiar en ello, ocurre arbitrariamente cuando el sistema lo considera necesario. Cuando eso ocurre, se dispara el evento Paint del PictureBox. Ahí, dentro de ese evento, es donde debes meterle al picturebox todo su contenido. El propio evento Paint tiene un argumento e que trae un Grahics. Puedes dibujar sobre ese Graphics directamente, o puedes asignar el bmp en el que has ido construyendo todo tu dibujo.
    domingo, 27 de noviembre de 2016 10:13

Todas las respuestas

  • Por lo que veo, Estás usando un picturebox llamado Image y usas por separado un bitmap en el que vas pintando lo extraes del picturebox. Esto no funcionará bien. El sistema repinta automáticamente el Picturebox cada vez que le viene bien, por ejemplo, al mover o redimensionar el formulario, o al pasar otra por encima, unas veces si y otras no. No puedes confiar en ello, ocurre arbitrariamente cuando el sistema lo considera necesario. Cuando eso ocurre, se dispara el evento Paint del PictureBox. Ahí, dentro de ese evento, es donde debes meterle al picturebox todo su contenido. El propio evento Paint tiene un argumento e que trae un Grahics. Puedes dibujar sobre ese Graphics directamente, o puedes asignar el bmp en el que has ido construyendo todo tu dibujo.
    domingo, 27 de noviembre de 2016 10:13
  • Creo que te entiendo bien, muchas gracias :D

    domingo, 27 de noviembre de 2016 18:32