I’m working on a silverlight project where users get to create their own Collages.
The problem
When loading a bunch of images by using the BitmapImage class, Silverlight hogs up huge unreasonable amounts of RAM. 150 pictures where single ones fill up at most 4,5mb takes up about 1,6GB of RAM–thus ending up throwing memory exceptions.
I’m loading them through streams, since the user selects their own photos.
What I’m looking for
A class, method or some process to eliminate the huge amount of RAM being sucked up. Speed is an issue, so I don’t want to be converting between images formats or anything like that. A fast resizing solution might work.
I’ve tried using a WriteableBitmap to render the images into, but I find this method forces me to reinvent the wheel when it comes to drag/drop and other things I want users to be able to do with the images.
What I would try is to take load each stream and resize it to a thumbnail (say, 640×480) before loading the next one. Then let the user work with the smaller images. Once you’re ready to generate the PDF, reload the JPEGs from the original streams one at a time, disposing of each bitmap before loading the next.