none
Tratamento de Imagens RRS feed

  • Pergunta

  • Olá estou com um problema, montei um form em VB Net 2010 para capturar e gravar imagem, mas quando vou utiliza-lo ele sempre dá este erro:

    AccessViolationException was unhandled>

    Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

    E trava o sistema, as vezes funciona, mas na maioria continua o erro.

    Eu uso o seguinte código para abrir o local da imagem.

     Private Sub cmdImagem_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdImagem.Click
            On Error Resume Next

            'con.Open()
            Dim OldFile As String
            Dim NewFile As String = Directory.GetCurrentDirectory & "\Dados\" & Trim(txtCaminho.Text) & ".jpg"

            With OpenFileDialog1
                .Filter = "Pictures (*.jpg)|*.jpg"
                .RestoreDirectory = True
                .ShowHelp = True
                .Title = "Selecione uma Foto para este Item"

                If .ShowDialog = Windows.Forms.DialogResult.OK Then
                    'Try
                    picFoto.Image = Image.FromFile(.FileName)
                    txtCaminho.Text = OpenFileDialog1.FileName
                    OldFile = txtCaminho.Text
                    'Catch ex As Exception
                    'MsgBox(ex.Message)
                    'End Try
                End If

            End With
            btnAlterar.Enabled = True
            'con.Close()
        End Sub

    Alguém sabe como resolver o problema???

    segunda-feira, 5 de maio de 2014 12:07

Respostas

  • não o problema tá acontecendo o seguinte, quando eu inicio o vb ele e vou abrir direto o form2 ele dá este erro de imagem, mas quando vou abrir primeiro o form1 aí dá certo e depois continua certo, somente quando eu inicio o debug

    • Marcado como Resposta LHPHenrique segunda-feira, 5 de maio de 2014 17:06
    segunda-feira, 5 de maio de 2014 15:52

Todas as Respostas

  • Verifique se o usuário que esta rodando aplicação tem acesso a pasta (Abra o visual studio como administrator se puder) tire o somente leitura da pasta (botão direito no diretório -> Propriedades -> Desmarque somente leitura e salva)
    segunda-feira, 5 de maio de 2014 12:21
  • O problema continua, já fiz isto e inclusive ja desmarquei tbm i JIT e nada sempre acontece e nem o Try  consegue evitar dele parar.
    segunda-feira, 5 de maio de 2014 13:26
  • O problema continua, já fiz isto e inclusive ja desmarquei tbm i JIT e nada sempre acontece e nem o Try  consegue evitar dele parar.

    Experimente tirar essas duas linhas:

                .RestoreDirectory = True
                .ShowHelp = True

    Agora rode, e veja se funciona...


    Herbert Lausmann

    segunda-feira, 5 de maio de 2014 13:30
  • Verifique se a imagem não esta sendo usada por outro programa ou por um processo não finalizado, me parece que o erro esta sendo lançado porque você ta tentando ler bytes quem estão corrompidos e em memoria
    segunda-feira, 5 de maio de 2014 13:42
  • Não deu tbm
    segunda-feira, 5 de maio de 2014 13:43
  • Não deu tbm
    Em qual linha exatamente está dando o erro?

    Herbert Lausmann

    segunda-feira, 5 de maio de 2014 13:54
  • aqui que aparece o erro Herbert

    If .ShowDialog = Windows.Forms.DialogResult.OK Then 

    segunda-feira, 5 de maio de 2014 13:57
  • aqui que aparece o erro Herbert

    If .ShowDialog = Windows.Forms.DialogResult.OK Then 

    Not good!

    Tente reescrever o código assim:

     Private Sub cmdImagem_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdImagem.Click
    
            'con.Open()
            Dim OldFile As String
            Dim NewFile As String = Directory.GetCurrentDirectory & "\Dados\" & Trim(txtCaminho.Text) & ".jpg"
    
            Dim dialog As New OpenFileDialog()
    
            'dialog.Filter = "Pictures (*.jpg)|*.jpg"
            'dialog.RestoreDirectory = True
            'dialog.ShowHelp = True
            'dialog.Title = "Selecione uma Foto para este Item"
    
            'Note que eu comentei as 4 linhas acima.
            'Primeiro rode o código exatamente assim.
            'Caso funcione, você descomenta uma linha e roda de novo.
            'Repita o processo até descomentar todas as linhas
            'Então dê um retorno dizendo como foi os testes...
    
            If dialog.ShowDialog() = Windows.Forms.DialogResult.OK Then
                picFoto.Image = Image.FromFile(dialog.FileName)
                txtCaminho.Text = dialog.FileName
                OldFile = txtCaminho.Text
            End If
    
            btnAlterar.Enabled = True
            'con.Close()
        End Sub


    Herbert Lausmann


    segunda-feira, 5 de maio de 2014 14:06
  • Nada continua o mesmo erro, mas quando eu abro o primeiro form1 com o mesmo codigo ele funciona normalmente aí os seguintes funciona tranquilo, mas é somente quando começo por este form2 que dá erro. 
    segunda-feira, 5 de maio de 2014 14:19
  • pode esta ocorrendo do form1 não esta fechando a imagem

    Declare OpenFileDialog como variavel global do form e no Dispose do form você executa o dialog.Dispose()

    segunda-feira, 5 de maio de 2014 14:20
  • como faço????

    segunda-feira, 5 de maio de 2014 15:49
  • não o problema tá acontecendo o seguinte, quando eu inicio o vb ele e vou abrir direto o form2 ele dá este erro de imagem, mas quando vou abrir primeiro o form1 aí dá certo e depois continua certo, somente quando eu inicio o debug

    • Marcado como Resposta LHPHenrique segunda-feira, 5 de maio de 2014 17:06
    segunda-feira, 5 de maio de 2014 15:52
  • Dim dialog As New OpenFileDialog()

    ' Implement IDisposable. Public Overloads Sub Dispose() Implements IDisposable.Dispose if(dialog!=null) dialog.Dispose(); base.Dispose(); End Sub


    http://msdn.microsoft.com/pt-br/library/vstudio/b1yfkh5e(v=vs.100).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1
    segunda-feira, 5 de maio de 2014 15:58
  • como faço isto

    segunda-feira, 5 de maio de 2014 16:24