}
// Set flag indicating that a recovery may be attempted if
// an OutOfMemoryError occurs during the decodeAsRenderedImage()
// call - which is only possible if the stream can seek backwards.
boolean canAttemptRecovery = source.canSeekBackwards();
// Save the stream position prior to decodeAsRenderedImage().
long streamPosition = Long.MIN_VALUE;
if(canAttemptRecovery) {
try {