1) Нужно ли писать g.dispose() для g (Dim g As Graphics) перед возвращением значения из функции getThumb? Не получится ли, что в результате высвобождения ресурсов функция вернет пустой результат (она возвращает thumb, а не g, но эти два объекта связаны каким-то не очень для меня понятным образом)
2) Где нужно освободить ресурсы для объекта thumb (As Bitmap), если этот объект является результатом, возвращаемым функцией getThumb? Если их освободить перед выходом из функции, то функция ничего не вернет. Если после выхода из функции - то не получится ли так, что функция возвращает копию объекта, а внутри нее память, занимаемая thumb, потеряется?
- Код: Выделить всё
Private Function getThumb(ByVal Im As Bitmap) As Bitmap
Dim tw, th, tx, ty As Integer
Dim w As Integer = Im.Width
Dim h As Integer = Im.Height
Dim whRatio As Single = CType(w, Single) / CType(h, Single)
If whRatio > 1 Then
tw = Me.ImageList1.ImageSize.Width
th = CType(CType(tw, Single) / whRatio, Integer)
Else
th = Me.ImageList1.ImageSize.Height
tw = CType(CType(th, Single) * whRatio, Integer)
End If
tx = (Me.ImageList1.ImageSize.Width - tw) / 2
ty = (Me.ImageList1.ImageSize.Height - th) / 2
Dim thumb As Bitmap = New Bitmap(Me.ImageList1.ImageSize.Width, Me.ImageList1.ImageSize.Height)
Dim g As Graphics = Graphics.FromImage(thumb)
g.Clear(Color.White)
g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBicubic
g.DrawImage(Im, New Rectangle(tx, ty, tw, th), New Rectangle(0, 0, w, h), GraphicsUnit.Pixel)
'Нужно ли писать следующую строчку?
g.Dispose()
Return thumb
End Function