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

View File

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