Package loci.formats

Examples of loci.formats.CoreMetadata


        // TODO: Record the channel names
        final long offset = ifdOffsets[idxOff];
        final boolean first=(idxOff == 1);
        final IFD ifd = tiffParser.getIFD(offset);
        tiffParser.fillInIFD(ifd);
          CoreMetadata ms = first?core.get(0):new CoreMetadata();
          ms.rgb = false;
          ms.interleaved = false;
          ms.littleEndian = ifd0.isLittleEndian();
          ms.sizeX = (int) ifd.getImageWidth() / channelCount;
          ms.sizeY = (int) ifd.getImageLength();
View Full Code Here


              for (IM3Record subSubDS:bSubDS.parseChunks(is)) {
                if (subSubDS instanceof ContainerRecord) {
                  final ContainerRecord bDataSet = (ContainerRecord) subSubDS;
                  dataSets.add(bDataSet);
                  List<IM3Record> subRecs = bDataSet.parseChunks(is);
                  final CoreMetadata cm = new CoreMetadata();
                  cm.dimensionOrder = DimensionOrder.XYCZT.getValue();
                  cm.littleEndian = true;
                  // TODO: Detect pixel type
                  cm.pixelType = FormatTools.UINT16;
                  for (IM3Record subRec:subRecs){
View Full Code Here

    }
    lsmFilenames = validFiles.toArray(new String[validFiles.size()]);

    core.clear();
    for (int c=0; c<seriesCount; c++) {
      CoreMetadata ms = new CoreMetadata();
        core.add(ms);
    }
    channelNames = new String[seriesCount][];
    ifdsList = new Vector<IFDList>();
    ifdsList.setSize(seriesCount);

    int realSeries = 0;
    for (int i=0; i<lsmFilenames.length; i++) {
      RandomAccessInputStream stream =
        new RandomAccessInputStream(lsmFilenames[i]);
      int count = seriesCounts.get(lsmFilenames[i]);

      TiffParser tp = new TiffParser(stream);
      Boolean littleEndian = tp.checkHeader();
      long[] ifdOffsets = tp.getIFDOffsets();
      int ifdsPerSeries = (ifdOffsets.length / 2) / count;

      int offset = 0;
      Object zeissTag = null;
      for (int s=0; s<count; s++, realSeries++) {
        CoreMetadata ms = core.get(realSeries);
        ms.littleEndian = littleEndian;

        IFDList ifds = new IFDList();
        while (ifds.size() < ifdsPerSeries) {
          tp.setDoCaching(offset == 0);
          IFD ifd = tp.getIFD(ifdOffsets[offset]);
          if (offset == 0) zeissTag = ifd.get(ZEISS_ID);
          if (offset > 0 && ifds.size() == 0) {
            ifd.putIFDValue(ZEISS_ID, zeissTag);
          }
          ifds.add(ifd);
          if (zeissTag != null) offset += 2;
          else offset++;
        }

        for (IFD ifd : ifds) {
          tp.fillInIFD(ifd);
        }

        ifdsList.set(realSeries, ifds);
      }
      stream.close();
    }

    MetadataStore store = makeFilterMetadata();

    lut = new byte[ifdsList.size()][][];

    long[] previousStripOffsets = null;

    for (int series=0; series<ifdsList.size(); series++) {
      // IFD ordering is ZPT, so reset state if we have multiple timepoints
      // this prevents offsets from being confused when the first offset in
      // the next series is legitimately smaller than the last offset in
      // the previous series
      if (series > 0 && getSizeT() > 1) {
        previousStripOffsets = null;
      }

      IFDList ifds = ifdsList.get(series);
      for (IFD ifd : ifds) {
        // check that predictor is set to 1 if anything other
        // than LZW compression is used
        if (ifd.getCompression() != TiffCompression.LZW) {
          ifd.putIFDValue(IFD.PREDICTOR, 1);
        }
      }

      // fix the offsets for > 4 GB files
      RandomAccessInputStream s =
        new RandomAccessInputStream(getLSMFileFromSeries(series));
      for (int i=0; i<ifds.size(); i++) {
        long[] stripOffsets = ifds.get(i).getStripOffsets();

        if (stripOffsets == null || (i != 0 && previousStripOffsets == null)) {
          throw new FormatException(
            "Strip offsets are missing; this is an invalid file.");
        }
        else if (i == 0 && previousStripOffsets == null) {
          previousStripOffsets = stripOffsets;
          continue;
        }

        boolean neededAdjustment = false;
        for (int j=0; j<stripOffsets.length; j++) {
          if (j >= previousStripOffsets.length) break;
          if (stripOffsets[j] < previousStripOffsets[j]) {
            stripOffsets[j] = (previousStripOffsets[j] & ~0xffffffffL) |
              (stripOffsets[j] & 0xffffffffL);
            if (stripOffsets[j] < previousStripOffsets[j]) {
              long newOffset = stripOffsets[j] + 0x100000000L;
              if (newOffset < s.length()) {
                stripOffsets[j] = newOffset;
              }
            }
            neededAdjustment = true;
          }
          if (neededAdjustment) {
            ifds.get(i).putIFDValue(IFD.STRIP_OFFSETS, stripOffsets);
          }
        }
        previousStripOffsets = stripOffsets;
      }
      s.close();

      initMetadata(series);
    }

    for (int i=0; i<getSeriesCount(); i++) {
      CoreMetadata ms = core.get(i);
      ms.imageCount = ms.sizeZ * ms.sizeC * ms.sizeT;
    }

    MetadataTools.populatePixels(store, this, true);
    for (int series=0; series<ifdsList.size(); series++) {
View Full Code Here

    tiffParser = new TiffParser(in);

    PhotoInterp photo = ifd.getPhotometricInterpretation();
    int samples = ifd.getSamplesPerPixel();

    CoreMetadata ms = core.get(series);
    ms.sizeX = (int) ifd.getImageWidth();
    ms.sizeY = (int) ifd.getImageLength();
    ms.rgb = samples > 1 || photo == PhotoInterp.RGB;
    ms.interleaved = false;
    ms.sizeC = isRGB() ? samples : 1;
View Full Code Here

TOP

Related Classes of loci.formats.CoreMetadata

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.