Search in sources :

Example 1 with ExtendedFileInfo

use of uk.ac.sussex.gdsc.core.ij.io.ExtendedFileInfo in project GDSC-SMLM by aherbert.

the class SeriesImageSource method openImage.

private TiffImage openImage(int id, String path) {
    TiffImage tiffImage = null;
    // We only need the meta data for the first image. We then assume check
    // all other images in the series match the pixel type and width of the first.
    final boolean pixelInfoOnly = id != 0;
    // Open using specialised TIFF reader for better non-sequential support
    SeekableStream ss = null;
    try {
        ss = createSeekableStream(path, imageData[id].fileSize);
        final FastTiffDecoder td = FastTiffDecoder.create(ss, path);
        td.setTrackProgress(trackProgress);
        // Try and use the index map
        final IndexMap indexMap = td.getIndexMap();
        // Check the image map is the correct size (only if we have sizes)
        if (indexMap != null && (imageSize == null || indexMap.getSize() == getImageSize(id))) {
            // We need the first IFD to define the image pixel type and width/height
            final ExtendedFileInfo fi = td.getTiffInfo(indexMap, 0, pixelInfoOnly);
            // A byte array seekable stream will ignore the close() method so we can re-use it
            tiffImage = new TiffImage(indexMap, fi, (ss instanceof ByteArraySeekableStream) ? ss : null);
        } else {
            // Reset after reading the index map
            td.reset();
            // Read all the IFDs
            final ExtendedFileInfo[] info = td.getTiffInfo(pixelInfoOnly);
            if (info != null) {
                // A byte array seekable stream will ignore the close() method so we can re-use it
                tiffImage = new TiffImage(info, (ss instanceof ByteArraySeekableStream) ? ss : null);
            }
        }
    } catch (final IOException ioe) {
    // Ignore
    } finally {
        closeInputStream(ss);
    }
    if (tiffImage == null) {
        // Prevent reading again. Skip the storeTiffImage(...) method
        // as that may be optional and we don't want to repeat the error.
        imageData[id].tiffImage = new TiffImage();
    } else {
        storeTiffImage(id, tiffImage);
    }
    return tiffImage;
}
Also used : FastTiffDecoder(uk.ac.sussex.gdsc.core.ij.io.FastTiffDecoder) IndexMap(uk.ac.sussex.gdsc.core.ij.io.FastTiffDecoder.IndexMap) ByteArraySeekableStream(uk.ac.sussex.gdsc.core.ij.io.ByteArraySeekableStream) ByteArraySeekableStream(uk.ac.sussex.gdsc.core.ij.io.ByteArraySeekableStream) SeekableStream(uk.ac.sussex.gdsc.core.ij.io.SeekableStream) FileSeekableStream(uk.ac.sussex.gdsc.core.ij.io.FileSeekableStream) ExtendedFileInfo(uk.ac.sussex.gdsc.core.ij.io.ExtendedFileInfo) IOException(java.io.IOException)

Aggregations

IOException (java.io.IOException)1 ByteArraySeekableStream (uk.ac.sussex.gdsc.core.ij.io.ByteArraySeekableStream)1 ExtendedFileInfo (uk.ac.sussex.gdsc.core.ij.io.ExtendedFileInfo)1 FastTiffDecoder (uk.ac.sussex.gdsc.core.ij.io.FastTiffDecoder)1 IndexMap (uk.ac.sussex.gdsc.core.ij.io.FastTiffDecoder.IndexMap)1 FileSeekableStream (uk.ac.sussex.gdsc.core.ij.io.FileSeekableStream)1 SeekableStream (uk.ac.sussex.gdsc.core.ij.io.SeekableStream)1