/*****************************************************************************
* Copyright (C) The Apache Software Foundation. All rights reserved. *
* ------------------------------------------------------------------------- *
* This software is published under the terms of the Apache Software License *
* version 1.1, a copy of which has been included with this distribution in *
* the LICENSE file. *
*****************************************************************************/
package org.apache.batik.ext.awt.image.spi;
import java.io.IOException;
import java.io.InputStream;
import org.apache.batik.ext.awt.image.codec.SeekableStream;
import org.apache.batik.ext.awt.image.codec.tiff.TIFFDecodeParam;
import org.apache.batik.ext.awt.image.codec.tiff.TIFFImage;
import org.apache.batik.ext.awt.image.renderable.DeferRable;
import org.apache.batik.ext.awt.image.renderable.Filter;
import org.apache.batik.ext.awt.image.renderable.RedRable;
import org.apache.batik.ext.awt.image.rendered.Any2sRGBRed;
import org.apache.batik.ext.awt.image.rendered.CachableRed;
import org.apache.batik.util.ParsedURL;
public class TIFFRegistryEntry
extends MagicNumberRegistryEntry {
static final byte [] sig1 = {(byte)0x49, (byte)0x49, 42, 0};
static final byte [] sig2 = {(byte)0x4D, (byte)0x4D, 0, 42};
static MagicNumberRegistryEntry.MagicNumber [] magicNumbers = {
new MagicNumberRegistryEntry.MagicNumber(0, sig1),
new MagicNumberRegistryEntry.MagicNumber(0, sig2) };
static final String [] exts = {"tiff", "tif" };
static final String [] mimeTypes = {"image/tiff", "image/tif" };
public TIFFRegistryEntry() {
super("TIFF", exts, mimeTypes, magicNumbers);
}
/**
* Decode the Stream into a RenderableImage
*
* @param is The input stream that contains the image.
* @param origURL The original URL, if any, for documentation
* purposes only. This may be null.
* @param needRawData If true the image returned should not have
* any default color correction the file may
* specify applied. */
public Filter handleStream(InputStream inIS,
ParsedURL origURL,
boolean needRawData) {
final DeferRable dr = new DeferRable();
final InputStream is = inIS;
final boolean raw = needRawData;
final String errCode;
final Object [] errParam;
if (origURL != null) {
errCode = ERR_URL_FORMAT_UNREADABLE;
errParam = new Object[] {"TIFF", origURL};
} else {
errCode = ERR_STREAM_FORMAT_UNREADABLE;
errParam = new Object[] {"TIFF"};
}
Thread t = new Thread() {
public void run() {
Filter filt;
try {
TIFFDecodeParam param = new TIFFDecodeParam();
SeekableStream ss =
SeekableStream.wrapInputStream(is, true);
CachableRed cr = new TIFFImage(ss, param, 0);
cr = new Any2sRGBRed(cr);
filt = new RedRable(cr);
} catch (IOException ioe) {
filt = ImageTagRegistry.getBrokenLinkImage
(this, errCode, errParam);
} catch (Throwable t) {
filt = ImageTagRegistry.getBrokenLinkImage
(this, errCode, errParam);
}
dr.setSource(filt);
}
};
t.start();
return dr;
}
}