* specify applied.
*/
public Filter handleStream(InputStream inIS,
ParsedURL origURL,
boolean needRawData) {
final DeferRable dr = new DeferRable();
final InputStream is = inIS;
final String errCode;
final Object [] errParam;
if (origURL != null) {
errCode = ERR_URL_FORMAT_UNREADABLE;
errParam = new Object[] {getFormatName(), origURL};
} else {
errCode = ERR_STREAM_FORMAT_UNREADABLE;
errParam = new Object[] {getFormatName()};
}
Thread t = new Thread() {
public void run() {
Filter filt;
try{
Iterator iter = ImageIO.getImageReadersByMIMEType(
getMimeTypes().get(0).toString());
if (!iter.hasNext()) {
throw new UnsupportedOperationException(
"No image reader for "
+ getFormatName() + " available!");
}
ImageReader reader = (ImageReader)iter.next();
ImageInputStream imageIn = ImageIO.createImageInputStream(is);
reader.setInput(imageIn, true);
int imageIndex = 0;
dr.setBounds(new Rectangle2D.Double
(0, 0,
reader.getWidth(imageIndex),
reader.getHeight(imageIndex)));
CachableRed cr;
//Naïve approach probably wasting lots of memory
//and ignoring the gamma correction done by PNGRed :-(
BufferedImage bi = reader.read(imageIndex);
cr = GraphicsUtil.wrap(bi);
cr = new Any2sRGBRed(cr);
cr = new FormatRed(cr, GraphicsUtil.sRGB_Unpre);
WritableRaster wr = (WritableRaster)cr.getData();
ColorModel cm = cr.getColorModel();
BufferedImage image = new BufferedImage
(cm, wr, cm.isAlphaPremultiplied(), null);
cr = GraphicsUtil.wrap(image);
filt = new RedRable(cr);
} catch (IOException ioe) {
// Something bad happened here...
filt = ImageTagRegistry.getBrokenLinkImage
(AbstractImageIORegistryEntry.this,
errCode, errParam);
} catch (ThreadDeath td) {
filt = ImageTagRegistry.getBrokenLinkImage
(AbstractImageIORegistryEntry.this,
errCode, errParam);
dr.setSource(filt);
throw td;
} catch (Throwable t) {
filt = ImageTagRegistry.getBrokenLinkImage
(AbstractImageIORegistryEntry.this,
errCode, errParam);
}
dr.setSource(filt);
}
};
t.start();
return dr;
}