One idea that gets you halfway there. Have each image bearing class implement a method to return an enumerator for its images - GetImageEnumerator. Now your loader can call that to get everybody's images and then load them. This is a cheap way of implementing visitor.
To implement restore, have the loader keep an array with two things at each element - a reference to the image of jest you found and loaded, and a copy of the original byte array. Restore then just runs through this list and puts the arrays back.
This design assumes that after the initial load, new image objects won't be created.