Si vous écrivez la classe qui fait référence à des fichiers/images, il est de votre responsabilité de fournir un mécanisme pour que ceux-ci soient libérés.
Pour toutes les applications .NET (pas seulement WinForms), l'implémentation d'IDisposable sur tous les types qui contiennent des références à de grandes ressources de fichiers/mémoire est toujours un bon début.
Si vous utilisez des types de cadres qui accèdent aux ressources, alors, comme d'autres l'ont dit, les blocs d'utilisation constituent une solution élégante.
Il est également possible de forcer le ramasseur d'ordures à se débarrasser des types au moment où vous lui demandez de le faire (déterministe), mais il est fortement recommandé de ne pas le faire et de laisser le ramasseur d'ordures décider lui-même pour améliorer les performances et la gestion de la mémoire.
Enfin, comme l'appel à Dispose (directement ou via l'utilisation) est effectué par l'utilisateur de vos types, il est essentiel de le documenter clairement (commentaires XML, etc.).
Voir ceci question précédente sur le SO pour plus de détails