* 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[] {"JPEG", origURL};
} else {
errCode = ERR_STREAM_FORMAT_UNREADABLE;
errParam = new Object[] {"JPEG"};
}
Thread t = new Thread() {
public void run() {
Filter filt;
try{
JPEGImageDecoder decoder;
decoder = JPEGCodec.createJPEGDecoder(is);
BufferedImage image;
try {
image = decoder.decodeAsBufferedImage();
} catch (TruncatedFileException tfe) {
image = tfe.getBufferedImage();
// Should probably draw some indication
// that this is a partial image....
if (image == null)
throw new IOException
("JPEG File was truncated");
}
dr.setBounds(new Rectangle2D.Double
(0, 0, image.getWidth(),
image.getHeight()));
CachableRed cr;
cr = GraphicsUtil.wrap(image);
cr = new Any2sRGBRed(cr);
cr = new FormatRed(cr, GraphicsUtil.sRGB_Unpre);
WritableRaster wr = (WritableRaster)cr.getData();
ColorModel cm = cr.getColorModel();
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
(JPEGRegistryEntry.this, errCode, errParam);
} catch (ThreadDeath td) {
filt = ImageTagRegistry.getBrokenLinkImage
(JPEGRegistryEntry.this, errCode, errParam);
dr.setSource(filt);
throw td;
} catch (Throwable t) {
filt = ImageTagRegistry.getBrokenLinkImage
(JPEGRegistryEntry.this, errCode, errParam);
}
dr.setSource(filt);
}
};
t.start();
return dr;
}