You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2007/12/17 18:05:48 UTC

svn commit: r604930 - /xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/image2/impl/imageio/ImageLoaderImageIO.java

Author: jeremias
Date: Mon Dec 17 09:05:47 2007
New Revision: 604930

URL: http://svn.apache.org/viewvc?rev=604930&view=rev
Log:
Dispose ImageReader when done reading.
Don't close streams as some codecs appear to do "late reading" of the image, i.e. only when the rasters are accessed, at which point they still seek on the stream. For this, the streams must remain open. I hope the codecs all properly close the streams once they don't need them anymore. The javadocs are not clear enough in this regards, IMO.

Modified:
    xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/image2/impl/imageio/ImageLoaderImageIO.java

Modified: xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/image2/impl/imageio/ImageLoaderImageIO.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/image2/impl/imageio/ImageLoaderImageIO.java?rev=604930&r1=604929&r2=604930&view=diff
==============================================================================
--- xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/image2/impl/imageio/ImageLoaderImageIO.java (original)
+++ xmlgraphics/fop/branches/Temp_ImagePackageRedesign/src/java/org/apache/fop/image2/impl/imageio/ImageLoaderImageIO.java Mon Dec 17 09:05:47 2007
@@ -97,40 +97,45 @@
             Iterator iter = ImageIO.getImageReaders(imgStream);
             while (iter.hasNext()) {
                 ImageReader reader = (ImageReader)iter.next();
-                imgStream.mark();
-                ImageReadParam param = reader.getDefaultReadParam();
-                reader.setInput(imgStream, false, ignoreMetadata);
-                final int pageIndex = 0; //Always the first page at the moment
                 try {
-                    if (ImageFlavor.BUFFERED_IMAGE.equals(this.targetFlavor)) {
-                        imageData = reader.read(pageIndex, param);
-                    } else {
-                        imageData = reader.readAsRenderedImage(pageIndex, param);
+                    imgStream.mark();
+                    ImageReadParam param = reader.getDefaultReadParam();
+                    reader.setInput(imgStream, false, ignoreMetadata);
+                    final int pageIndex = 0; //Always the first page at the moment
+                    try {
+                        if (ImageFlavor.BUFFERED_IMAGE.equals(this.targetFlavor)) {
+                            imageData = reader.read(pageIndex, param);
+                        } else {
+                            imageData = reader.readAsRenderedImage(pageIndex, param);
+                        }
+                        if (iiometa == null) {
+                            iiometa = reader.getImageMetadata(pageIndex);
+                        }
+                        break; //Quit early, we have the image
+                    } catch (IIOException iioe) {
+                        if (firstException == null) {
+                            firstException = iioe;
+                        } else {
+                            log.debug("non-first error loading image: " + iioe.getMessage());
+                        }
                     }
-                    if (iiometa == null) {
-                        iiometa = reader.getImageMetadata(pageIndex);
+                    try {
+                        //Try fallback for CMYK images
+                        BufferedImage bi = getFallbackBufferedImage(reader, pageIndex, param);
+                        imageData = bi;
+                        firstException = null; //Clear exception after successful fallback attempt
+                        break;
+                    } catch (IIOException iioe) {
+                        //ignore
                     }
-                    break; //Quit early, we have the image
-                } catch (IIOException iioe) {
-                    if (firstException == null) {
-                        firstException = iioe;
-                    } else {
-                        log.debug("non-first error loading image: " + iioe.getMessage());
-                    }
-                }
-                try {
-                    //Try fallback for CMYK images
-                    BufferedImage bi = getFallbackBufferedImage(reader, pageIndex, param);
-                    imageData = bi;
-                    firstException = null; //Clear exception after successful fallback attempt
-                    break;
-                } catch (IIOException iioe) {
-                    //ignore
+                    imgStream.reset();
+                } finally {
+                    reader.dispose();
                 }
-                imgStream.reset();
             }
         } finally {
-            ImageUtil.closeQuietly(src);
+            //ImageUtil.closeQuietly(src); //Cannot do that as codecs my do late reading
+            ImageUtil.removeStreams(src);
         }
         if (firstException != null) {
             throw new ImageException("Error while loading image: "



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org