/* Copyright (C) 2001, 2008 United States Government as represented by
the Administrator of the National Aeronautics and Space Administration.
All Rights Reserved.
*/
package gov.nasa.worldwind.formats.tiff;
import java.io.IOException;
import java.util.Locale;
import javax.imageio.ImageReader;
import javax.imageio.spi.ImageReaderSpi;
import javax.imageio.stream.ImageInputStream;
/**
* GeotiffImageReaderSpi is a singleton class. Multiply registering it should be harmless.
* @author brownrigg
* @version $Id$
*/
public class GeotiffImageReaderSpi extends ImageReaderSpi {
public static GeotiffImageReaderSpi inst() {
if (theInstance == null)
theInstance = new GeotiffImageReaderSpi();
return theInstance;
}
private GeotiffImageReaderSpi() {
super(vendorName, version, names, suffixes, mimeTypes,
readerClassname, STANDARD_INPUT_TYPE,
null, false, null, null, null, null,
false, null, null, null, null);
}
@Override
public boolean canDecodeInput(Object source) throws IOException {
if (source == null || !(source instanceof ImageInputStream))
return false;
ImageInputStream inp = (ImageInputStream) source;
byte[] ifh = new byte[8]; // Tiff image-file header
try {
inp.mark();
inp.readFully(ifh);
inp.reset();
} catch(IOException ex) {
return false;
}
return (ifh[0] == 0x4D && ifh[1] == 0x4D && ifh[2] == 0x00 && ifh[3] == 0x2A) || // big-endian
(ifh[0] == 0x49 && ifh[1] == 0x49 && ifh[2] == 0x2A && ifh[3] == 0x00); // little-endian
}
@Override
public ImageReader createReaderInstance(Object extension) throws IOException {
return new GeotiffImageReader(this);
}
@Override
public String getDescription(Locale locale) {
return "NASA WorldWind simplified Geotiff Image Reader";
}
private static GeotiffImageReaderSpi theInstance = null;
private static final String vendorName = "NASA WorldWind";
private static final String version = "1.0";
private static final String[] names = {"tiff", "GTiff", "geotiff"};
private static final String[] suffixes = {"tif", "tiff", "gtif"};
private static final String[] mimeTypes = {"image/geotiff"};
private static final String readerClassname = "gov.nasa.worldwind.servers.wms.utilities.TiffImageReader";
}