76 lines
2.8 KiB
Java
76 lines
2.8 KiB
Java
/*
|
|
* Copyright (c) 2011 J. Lewis Muir <jlmuir@imca.aps.anl.gov>
|
|
*
|
|
* Permission to use, copy, modify, and distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* copyright notice and this permission notice appear in all copies.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
package imcacat.jcbf;
|
|
|
|
import java.io.EOFException;
|
|
import java.io.IOException;
|
|
import java.util.Arrays;
|
|
import java.util.Locale;
|
|
|
|
import javax.imageio.ImageReader;
|
|
import javax.imageio.spi.ImageReaderSpi;
|
|
import javax.imageio.stream.ImageInputStream;
|
|
|
|
/**
|
|
* I am a reader SPI for CBF images.
|
|
*/
|
|
public class CbfImageReaderSpi extends ImageReaderSpi {
|
|
private static final String VENDOR_NAME = "IMCA-CAT";
|
|
private static final String VERSION = Version.ID;
|
|
private static final String[] FORMAT_NAMES = { "cbf", "CBF" };
|
|
private static final String[] FORMAT_SUFFIXES = { "cbf" };
|
|
private static final String[] MIME_TYPES = { "image/x-cbf" };
|
|
private static final String READER_CLASS_NAME = "imcacat.jcbf.CbfImageReader";
|
|
private static final String[] WRITER_SPI_CLASS_NAMES = { "imcacat.jcbf.CbfImageWriterSpi" };
|
|
private static final String METADATA_FORMAT_NAME = "imcacat.jcbf.CbfMetadataFormat_1.0";
|
|
private static final String METADATA_FORMAT_CLASS_NAME = "imcacat.jcbf.CbfMetadataFormat";
|
|
|
|
public CbfImageReaderSpi() {
|
|
super(VENDOR_NAME, VERSION, FORMAT_NAMES, FORMAT_SUFFIXES, MIME_TYPES, READER_CLASS_NAME,
|
|
STANDARD_INPUT_TYPE, WRITER_SPI_CLASS_NAMES, false, null, null, null, null, false,
|
|
METADATA_FORMAT_NAME, METADATA_FORMAT_CLASS_NAME, null, null);
|
|
}
|
|
|
|
@Override
|
|
public boolean canDecodeInput(Object source) throws IOException {
|
|
if (!(source instanceof ImageInputStream)) return false;
|
|
ImageInputStream stream = (ImageInputStream)source;
|
|
String magicNumber = "###CBF: VERSION";
|
|
byte[] expected = magicNumber.getBytes("US-ASCII");
|
|
byte[] actual = new byte[expected.length];
|
|
stream.mark();
|
|
try {
|
|
stream.readFully(actual);
|
|
return Arrays.equals(expected, actual);
|
|
} catch (EOFException e) {
|
|
return false;
|
|
} finally {
|
|
stream.reset();
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public ImageReader createReaderInstance(Object extension) throws IOException {
|
|
return new CbfImageReader(this);
|
|
}
|
|
|
|
@Override
|
|
public String getDescription(Locale locale) {
|
|
return "CBF image reader";
|
|
}
|
|
}
|