When you have code like:
Bitmap bmp = new Bitmap ( 100, 100 );
Graphics g = Graphics.FromImage ( bmp );
Pen p = new Pen ( Color.FromArgb ( 128, Color.Blue )
C# doesn't "destruct" or dispose of things as soon they go out of scope.
Those classes will most likely automatically free the unmanaged resources that they hold on to in their special Finalizer method, which will be called when they are garbage collected at an indeterminate time after going out of scope.
But to rely on that is to rely on something that is out of your control, and might not happen for a while.
If the class implements IDisposable, best practice is for you to manually call Dispose() somewhere, or preferably wrap it in a using block. That way you can be sure that:
A. The unmanaged resources are definitely being freed.
B. The unmanaged resources are freed as soon as possible.