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); } }