From 20a61daa0e9bb80bc8166cbc896600c355d85356 Mon Sep 17 00:00:00 2001 From: Harald Kuhr Date: Fri, 16 Oct 2009 17:41:21 +0200 Subject: [PATCH] Implemented getImageTypes Added destination support Fixed a few bugs, to make readers pass tests --- .../imageio/plugins/svg/SVGImageReader.java | 25 +++++++++++++++++-- .../plugins/svg/SVGImageReaderSpi.java | 7 ++++++ .../imageio/plugins/wmf/WMFImageReader.java | 5 ++-- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/twelvemonkeys-imageio/batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReader.java b/twelvemonkeys-imageio/batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReader.java index 76305468..ec0bd874 100755 --- a/twelvemonkeys-imageio/batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReader.java +++ b/twelvemonkeys-imageio/batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReader.java @@ -60,6 +60,7 @@ import java.awt.image.BufferedImage; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; +import java.util.Collections; import java.util.Iterator; import java.util.Map; @@ -119,6 +120,16 @@ public class SVGImageReader extends ImageReaderBase { baseURI = svgParam.getBaseURI(); } + Dimension size; + if (pParam != null && (size = pParam.getSourceRenderSize()) != null) { + // Use size... + } + else { + size = new Dimension(getWidth(pIndex), getHeight(pIndex)); + } + + BufferedImage destination = getDestination(pParam, getImageTypes(pIndex), size.width, size.height); + // Read in the image, using the Batik Transcoder try { processImageStarted(pIndex); @@ -126,9 +137,19 @@ public class SVGImageReader extends ImageReaderBase { mRasterizer.mTranscoderInput.setURI(baseURI); BufferedImage image = mRasterizer.getImage(); + Graphics2D g = destination.createGraphics(); + try { + g.setComposite(AlphaComposite.Src); + g.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_DISABLE); + g.drawImage(image, 0, 0, null); // TODO: Dest offset? + } + finally { + g.dispose(); + } + processImageComplete(); - return image; + return destination; } catch (TranscoderException e) { throw new IIOException(e.getMessage(), e); @@ -220,7 +241,7 @@ public class SVGImageReader extends ImageReaderBase { } public Iterator getImageTypes(int imageIndex) throws IOException { - throw new UnsupportedOperationException("Method getImageTypes not implemented");// TODO: Implement + return Collections.singleton(ImageTypeSpecifier.createFromRenderedImage(mRasterizer.createImage(1, 1))).iterator(); } /** diff --git a/twelvemonkeys-imageio/batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderSpi.java b/twelvemonkeys-imageio/batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderSpi.java index 3b536f05..ec1e90ce 100755 --- a/twelvemonkeys-imageio/batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderSpi.java +++ b/twelvemonkeys-imageio/batik/src/main/java/com/twelvemonkeys/imageio/plugins/svg/SVGImageReaderSpi.java @@ -153,6 +153,13 @@ public class SVGImageReaderSpi extends ImageReaderSpi { @Override public void onRegistration(ServiceRegistry registry, Class category) { if (!SVG_READER_AVAILABLE) { + try { + new SVGImageReader(this); + } + catch (Throwable t) { + t.printStackTrace(); + } + IIOUtil.deregisterProvider(registry, this, category); } }} diff --git a/twelvemonkeys-imageio/batik/src/main/java/com/twelvemonkeys/imageio/plugins/wmf/WMFImageReader.java b/twelvemonkeys-imageio/batik/src/main/java/com/twelvemonkeys/imageio/plugins/wmf/WMFImageReader.java index d650e107..9f78ed5c 100755 --- a/twelvemonkeys-imageio/batik/src/main/java/com/twelvemonkeys/imageio/plugins/wmf/WMFImageReader.java +++ b/twelvemonkeys-imageio/batik/src/main/java/com/twelvemonkeys/imageio/plugins/wmf/WMFImageReader.java @@ -129,8 +129,9 @@ public class WMFImageReader extends ImageReaderBase { return mReader.getHeight(pIndex); } - public Iterator getImageTypes(final int imageIndex) throws IOException { - throw new UnsupportedOperationException("Method getImageTypes not implemented");// TODO: Implement + public Iterator getImageTypes(final int pImageIndex) throws IOException { + init(); + return mReader.getImageTypes(pImageIndex); } }