package org.lateralgm.file.iconio;
import java.io.IOException;
import java.nio.ByteOrder;
import java.util.Locale;
import javax.imageio.ImageReader;
import javax.imageio.spi.ImageReaderSpi;
import javax.imageio.stream.ImageInputStream;
/**
* <p>
* Information for the ICO image service provider plugin.
* </p>
* @author © Christian Treber, ct@ctreber.com
*/
public class ICOImageReaderSPI extends ImageReaderSpi
{
/**
* Define the capabilities of this provider service.
*/
public ICOImageReaderSPI()
{
super("Christian Treber, www.ctreber.com, ct@ctreber.com","1.0 December 2003",new String[] {
"ico","ICO" },new String[] { "ico" },new String[] { "image/x-ico" },
"org.lateralgm.file.iconio.ICOReader",new Class[] { ImageInputStream.class },null,false,
null,null,null,null,false,null,null,null,null);
}
public boolean canDecodeInput(final Object pSource)
{
if (pSource instanceof ImageInputStream)
{
ImageInputStream in = (ImageInputStream) pSource;
ByteOrder order = in.getByteOrder();
in.setByteOrder(ByteOrder.LITTLE_ENDIAN);
try
{
in.mark();
int res = in.readShort();
int type = in.readShort();
in.reset();
if (res == 0 && type == 1)
{
return true;
}
}
catch (IOException e)
{
e.printStackTrace();
}
in.setByteOrder(order);
}
return false;
}
/**
* @see javax.imageio.spi.ImageReaderSpi#createReaderInstance(java.lang.Object)
* @param pExtension
* Not used by our reader.
*/
public ImageReader createReaderInstance(final Object pExtension)
{
return new ICOReader(this);
}
/**
* @see javax.imageio.spi.IIOServiceProvider#getDescription(java.util.Locale)
* @param pLocale
* Ignored - one locale fits all.
*/
public String getDescription(final Locale pLocale)
{
return "Microsoft Icon Format (ICO)";
}
}