Implemented getImageTypes

Added destination support
Fixed a few bugs, to make readers pass tests
This commit is contained in:
Harald Kuhr 2009-10-16 17:41:21 +02:00
parent fa69918adb
commit 20a61daa0e
3 changed files with 33 additions and 4 deletions

View File

@ -60,6 +60,7 @@ import java.awt.image.BufferedImage;
import java.io.IOException; import java.io.IOException;
import java.net.MalformedURLException; import java.net.MalformedURLException;
import java.net.URL; import java.net.URL;
import java.util.Collections;
import java.util.Iterator; import java.util.Iterator;
import java.util.Map; import java.util.Map;
@ -119,6 +120,16 @@ public class SVGImageReader extends ImageReaderBase {
baseURI = svgParam.getBaseURI(); 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 // Read in the image, using the Batik Transcoder
try { try {
processImageStarted(pIndex); processImageStarted(pIndex);
@ -126,9 +137,19 @@ public class SVGImageReader extends ImageReaderBase {
mRasterizer.mTranscoderInput.setURI(baseURI); mRasterizer.mTranscoderInput.setURI(baseURI);
BufferedImage image = mRasterizer.getImage(); 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(); processImageComplete();
return image; return destination;
} }
catch (TranscoderException e) { catch (TranscoderException e) {
throw new IIOException(e.getMessage(), e); throw new IIOException(e.getMessage(), e);
@ -220,7 +241,7 @@ public class SVGImageReader extends ImageReaderBase {
} }
public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex) throws IOException { public Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex) throws IOException {
throw new UnsupportedOperationException("Method getImageTypes not implemented");// TODO: Implement return Collections.singleton(ImageTypeSpecifier.createFromRenderedImage(mRasterizer.createImage(1, 1))).iterator();
} }
/** /**

View File

@ -153,6 +153,13 @@ public class SVGImageReaderSpi extends ImageReaderSpi {
@Override @Override
public void onRegistration(ServiceRegistry registry, Class<?> category) { public void onRegistration(ServiceRegistry registry, Class<?> category) {
if (!SVG_READER_AVAILABLE) { if (!SVG_READER_AVAILABLE) {
try {
new SVGImageReader(this);
}
catch (Throwable t) {
t.printStackTrace();
}
IIOUtil.deregisterProvider(registry, this, category); IIOUtil.deregisterProvider(registry, this, category);
} }
}} }}

View File

@ -129,8 +129,9 @@ public class WMFImageReader extends ImageReaderBase {
return mReader.getHeight(pIndex); return mReader.getHeight(pIndex);
} }
public Iterator<ImageTypeSpecifier> getImageTypes(final int imageIndex) throws IOException { public Iterator<ImageTypeSpecifier> getImageTypes(final int pImageIndex) throws IOException {
throw new UnsupportedOperationException("Method getImageTypes not implemented");// TODO: Implement init();
return mReader.getImageTypes(pImageIndex);
} }
} }