Porque no puedo eliminar la imagen source una vez que termina la operación dice que esta en uso.
No consigo hallar la forma de reproducir el problema que describes, pero es posible que sea por que despues de llamar a la función le estés pasando el
Bitmap al constructor de algún
type y trates de liberar el
Bitmap antes que ese
type?.
Próbe con otros codigos que tengo que usan Using
La correcta liberación de objetos de la función que has mostrado sería la siguiente:
Private Function Resize_Image(ByVal img As Image, ByVal Width As Int32, ByVal Height As Int32) As Bitmap
Dim Bitmap_Dest As New Bitmap(CInt(Width), CInt(Height))
Using Graphic As Graphics = Graphics.FromImage(Bitmap_Dest)
Graphic.DrawImage(img, 0, 0, Bitmap_Dest.Width + 1, Bitmap_Dest.Height + 1)
End Using
Return Bitmap_Dest
End Function
tambien hize Dispose a cada imagen y nada
La declaración e instanciación de
Bitmap_Source es innecesaria así que puedes eliminarla del código como hice yo arriba, y la instancia del objeto
Bitmap_Dest no debes liberarla puesto que es el objeto que contiene la imagen que será devuelta por la función -.-, deberás liberarla despues de haber llamado a dicha función, es decir cuando ya no necesites usar/mostrar esa imagen, no antes.
( Se que ultimamente no dejo de repetirte lo siguiente de aquí abajo en cada duda que tienes, pero me veo casi obligado a hacerlo puesto que parece que te busques los problemas intencionadamente sin necesidad xD usando esos códigos antiguos y con imperfecciones de diseño, y eso sería algo que puedes evitar de la siguiente forma... )
En mi API gratuita
ElektroKit puedes encontrar las siguientes funciones (a modo de extensiones de método) para redimensionar imágenes:
https://github.com/ElektroStudios/ElektroKit/blob/master/Solution/Elektro.Imaging/Extensions/Bitmap/Resize.vbhttps://github.com/ElektroStudios/ElektroKit/blob/master/Solution/Elektro.Imaging/Extensions/Image/Resize.vbCódigo fuente destripado y adaptado:
<HideModuleName>
<DebuggerStepThrough>
Public Module ImagingExtensions
<Extension>
<EditorBrowsable(EditorBrowsableState.Always)>
Public Function Resize(ByVal sender As Image, ByVal size As Size) As Image
If (size.Width <= 0) Then
Throw New ArgumentException(paramName:="width", message:="Value bigger than 0 is reqired.")
ElseIf (size.Height <= 0) Then
Throw New ArgumentException(paramName:="height", message:="Value bigger than 0 is reqired.")
Else
Dim bmp As New Bitmap(size.Width, size.Height, sender.PixelFormat)
Using g As Graphics = Graphics.FromImage(bmp)
With g
.CompositingQuality = CompositingQuality.Default
.InterpolationMode = InterpolationMode.Default
.PixelOffsetMode = PixelOffsetMode.Default
.SmoothingMode = SmoothingMode.Default
.DrawImage(sender, 0, 0, bmp.Width, bmp.Height)
End With
End Using
Return bmp
End If
End Function
<Extension>
<EditorBrowsable(EditorBrowsableState.Always)>
Public Function Resize(ByVal sender As Image, ByVal percent As Double) As Image
Dim width As Integer = (sender.Width \ CInt(100 / percent))
Dim height As Integer = (sender.Height \ CInt(100 / percent))
Return Resize(sender, New Size(width, height))
End Function
<Extension>
<EditorBrowsable(EditorBrowsableState.Always)>
Public Function Resize(ByVal sender As Bitmap, ByVal size As Size) As Bitmap
Return DirectCast(Resize(DirectCast(sender, Image), size), Bitmap)
End Function
<Extension>
<EditorBrowsable(EditorBrowsableState.Always)>
Public Function Resize(ByVal sender As Bitmap, ByVal percent As Double) As Bitmap
Return DirectCast(Resize(DirectCast(sender, Image), percent), Bitmap)
End Function
End Module
Saludos