Usuário com melhor resposta
Apagar bitmap

Pergunta
-
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 IfNesse 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.
Respostas
-
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)
- Sugerido como Resposta ThiagoLunardi quinta-feira, 23 de janeiro de 2014 17:21
- Marcado como Resposta Fernando Oliveira sexta-feira, 24 de outubro de 2014 14:13
Todas as Respostas
-
-
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)
- Sugerido como Resposta ThiagoLunardi quinta-feira, 23 de janeiro de 2014 17:21
- Marcado como Resposta Fernando Oliveira sexta-feira, 24 de outubro de 2014 14:13