Storing image in cache
See the question and my original answer on StackOverflowIf you want to keep a valid image in the cache, you should not do the image.Dispose() call. This will basically release unmanaged GDI+ resources, but keep the image reference in the cache, and GDI+ will not be happy on the next call.
Do the Dispose call only prior to removing it from the cache (if ever you need to remove it from the cache) or at expiration time only.