Exemplo n.º 1
0
 public IIOMetadata getStreamMetadata(int imageIndex) throws IIOException {
   readHeader();
   TIFFStreamMetadata sm = new TIFFStreamMetadata();
   Node root = sm.getAsTree(TIFFStreamMetadata.nativeMetadataFormatName);
   sm.setFromTree(TIFFStreamMetadata.nativeMetadataFormatName, root);
   return sm;
 }
Exemplo n.º 2
0
  // Do not seek to the beginning of the stream so as to allow users to
  // point us at an IFD within some other file format
  private void readHeader() throws IIOException {
    if (gotHeader) {
      return;
    }
    if (stream == null) {
      throw new IllegalStateException("Input not set!");
    }

    // Create an object to store the stream metadata
    this.streamMetadata = new TIFFStreamMetadata();

    try {
      int byteOrder = stream.readUnsignedShort();
      if (byteOrder == 0x4d4d) {
        streamMetadata.byteOrder = ByteOrder.BIG_ENDIAN;
        stream.setByteOrder(ByteOrder.BIG_ENDIAN);
      } else if (byteOrder == 0x4949) {
        streamMetadata.byteOrder = ByteOrder.LITTLE_ENDIAN;
        stream.setByteOrder(ByteOrder.LITTLE_ENDIAN);
      } else {
        processWarningOccurred("Bad byte order in header, assuming little-endian");
        streamMetadata.byteOrder = ByteOrder.LITTLE_ENDIAN;
        stream.setByteOrder(ByteOrder.LITTLE_ENDIAN);
      }

      int magic = stream.readUnsignedShort();
      if (magic != 42) {
        processWarningOccurred("Bad magic number in header, continuing");
      }

      // Seek to start of first IFD
      long offset = stream.readUnsignedInt();
      imageStartPosition.add(new Long(offset));
      stream.seek(offset);
    } catch (IOException e) {
      throw new IIOException("I/O error reading header!", e);
    }

    gotHeader = true;
  }