Disposing has nothing to do with memory. Memory is a managed resource and disposing deals with unmanaged resources, like GDI handles. If you have a global structure like dictionary or something that you add these to and don't remove them, you could be "leaking" references and not allowing the garbage collector to find them.
In these cases it's often tempting to call GC.Collect() to try to clean them up. Know that this won't help you. If the garbage collector were able to clean up the memory, it would. Calling GC.Collect() won't change things if the object you want to collect is still rooted somewhere.
Looking at the link in your comments, this might work a little better (adapted from a comment in the link):
''# Crop a bitmap
<Extension()> _
Public Function Crop(ByVal source As Bitmap, _
ByVal cropX As Integer, ByVal cropY As Integer, _
ByVal cropWidth As Integer, ByVal cropHeight As Integer) As Bitmap
''# parameter checking/guard clauses
If source Is Nothing Then Throw New ArgumentNullException()
If cropX > source.Width Then Throw New InvalidArgumentException("cropX")
If cropY > source.Height Then Throw New InvalidArgumentException("cropY")
If cropX < 0 Then cropX = 0
If cropY < 0 Then cropY = 0
cropWidth = Math.Min(cropWidth, source.Width - cropX)
cropHeight = Math.Min(cropHeight, source.Height - cropY)
''# Create the new bitmap and associated graphics object
Dim bmp As New Bitmap(cropWidth, cropHeight)
Using g As Graphics = Graphics.FromImage(bmp)
''# Draw the specified section of the source bitmap to the new one
g.DrawImage(source, New Rectangle(0, 0, cropWidth, cropHeight), cropX, cropY, cropWidth, cropHeight, GraphicsUnit.Pixel)
End Using
''# Return the bitmap
Return bmp
End Function
I think your problem is elsewhere, but this code is still probably a little nicer.