none
Apagar bitmap

    Question

  • Fala galera,

    Estou criando um arquivo bitmap assim:

    Dim oCanvas As Bitmap = CType(Bitmap.FromFile(caminhoFisico & pastaTemp & arquivo), Bitmap)
                Dim encoderParams As System.Drawing.Imaging.EncoderParameters = New System.Drawing.Imaging.EncoderParameters()
                Dim g As Graphics = Graphics.FromImage(oCanvas)
                g.SmoothingMode = SmoothingMode.HighQuality

                g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic
                g.SmoothingMode = SmoothingMode.HighQuality
                Dim obj As New busArquivos
                Dim arr As ArrayList = obj.retornaTamanhoImagem("view", oCanvas.Width, oCanvas.Height)
                Dim vSize As New Size(Convert.ToInt32(arr(0)), Convert.ToInt32(arr(1)))
                oCanvas = New Bitmap(oCanvas, vSize)
                Dim quality As Long = 80
                Dim encoderParam As System.Drawing.Imaging.EncoderParameter = New System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality)
                encoderParams.Param(0) = encoderParam

                Dim arrayICI As ImageCodecInfo() = ImageCodecInfo.GetImageEncoders()
                Dim jpegICI As ImageCodecInfo
                Dim x As Integer
                For x = 0 To arrayICI.Length - 1

                    If (arrayICI(x).FormatDescription.Equals("JPEG")) Then
                        jpegICI = arrayICI(x)
                        Exit For
                    End If

                Next        
                   
                oCanvas.Save(caminhoFisico & pastaUploads & arquivo, System.Drawing.Imaging.ImageFormat.Jpeg)
          

                g.Dispose()
                oCanvas.Dispose()

                If System.IO.File.Exists(caminhoFisico & pastaTemp & arquivo) Then
                    System.IO.File.Delete(caminhoFisico & pastaTemp & arquivo)
                End If

    Nesse final, na hora de apagar o arquivo que está na pasta temporária, dá esse erro The process cannot access the file 'D:\images\temp\1024.jpg' because it is being used by another process.

    Mesmo usando o .Dispose o arquivo continua preso na memória, como faço para apagar este arquivo?

    Valeu.

    Wednesday, January 22, 2014 7:29 PM

All replies

  • Oi Galera, blz?

    Alguém consegue me ajudar nesse caso?

    Valeu.

    Thursday, January 23, 2014 5:02 PM
  • Vc abre dois processos para ler o bitmap, mas só fecha uma vez. Veja só.

    Na 1a linha vc faz:

    Dim oCanvas As Bitmap = CType(Bitmap.FromFile(caminhoFisico & pastaTemp & arquivo), Bitmap)

    E depois vc faz:

    O 1o processo, que vc abriu na 1a linha vc foi finalizado, e ficou por conta de ser finalizado apenas quando a classe for destruída. Faça um .Close() ou .Dispose() antes da linha abaixo em questão, e veja se o problema para.

    // Exemplo: oCanvas.Close() ou oCanvas.Dispose()

    oCanvas = New Bitmap(oCanvas, vSize)

    • Proposed as answer by ThiagoLunardi Thursday, January 23, 2014 5:21 PM
    Thursday, January 23, 2014 5:21 PM