
org.monte.media.tiff.TIFFDirectory Maven / Gradle / Ivy
/*
* @(#)TIFFDirectory.java 1.0 2010-07-25
*
* Copyright (c) 2010 Werner Randelshofer, Goldau, Switzerland.
* All rights reserved.
*
* You may not use, copy or modify this file, except in compliance with the
* license agreement you entered into with Werner Randelshofer.
* For details see accompanying license terms.
*/
package org.monte.media.tiff;
import java.util.ArrayList;
/**
* A convenience class for working with TIFF IFD's.
*
* @author Werner Randelshofer
* @version 1.0 2010-07-25 Created.
*/
public class TIFFDirectory extends TIFFNode {
/** The tag set of this directory. */
private TagSet tagSet;
/** The index of this directory. */
private int index;
/** The IFD from which this directory was read.
* ifd is null, if this directory has not been read from a TIFF file.
*/
private IFD ifd;
/** Segments of the TIFF file which hold the IFD.
* tiffSegments is null, if this directory has not been read from a TIFF file.
*/
private ArrayList fileSegments;
/** Offset of the directory in the file segment if ifd is null. */
private long offset;
/** Length of the directory in the file segment if ifd is null. */
private long length;
/** Creates a TIFFDirectory identified by the specified TIFFTag. */
public TIFFDirectory(TagSet tagSet, TIFFTag tag, int index) {
super(tag);
this.tagSet=tagSet;
this.index=index;
}
/** Creates a TIFFDirectory identified by the specified TIFFTag and associated
* with the specified IFD and file segments. */
public TIFFDirectory(TagSet tagSet, TIFFTag tag, int index, IFD ifd, IFDEntry parentEntry, ArrayList fileSegments) {
this(tagSet, tag, index);
this.ifd=ifd;
this.ifdEntry=parentEntry;
this.fileSegments=fileSegments;
}
/** Creates a TIFFDirectory identified by the specified TIFFTag and associated
* with the specified IFD and file segments. */
public TIFFDirectory(TagSet tagSet, TIFFTag tag, int index, IFD ifd, IFDEntry parentEntry, FileSegment fileSegment) {
this(tagSet, tag, index);
this.ifd=ifd;
this.ifdEntry=parentEntry;
this.fileSegments=new ArrayList();
fileSegments.add(fileSegment);
}
public TIFFDirectory(TagSet tagSet, TIFFTag tag, int index, long offset, long length, FileSegment fileSegment) {
this(tagSet, tag, index);
this.offset=offset;
this.length=length;
this.fileSegments=new ArrayList();
fileSegments.add(fileSegment);
}
public TIFFDirectory(TagSet tagSet, TIFFTag tag, int index, long offset, long length, ArrayList fileSegments) {
this(tagSet, tag, index);
this.offset=offset;
this.length=length;
this.fileSegments=fileSegments;
}
/** Returns the IFD from which this directory has been read.
*
* @return IFD or null.
*/
public IFD getIFD() {
return ifd;
}
/** Returns the tag set used by this directory. */
public TagSet getTagSet() {
return tagSet;
}
public String getName() {
return tagSet==null?null: tagSet.getName();
}
public int getIndex() {
return index;
}
public int getCount() {
return getChildren().size();
}
public long getOffset() {
return ifd!=null?ifd.getOffset():offset;
}
public long getLength() {
return ifd!=null?ifd.getLength():length;
}
/** Returns the segments of the TIFF file inside its parent file.
* In a JPEG JFIF stream, a TIFF file can be segmented over multiple
* APP markers.
*
* @return segment list or null.
*/
public ArrayList getFileSegments() {
return fileSegments;
}
/** Returns a TIFFField with the specified tag. If a child node with
* this tag exists.
* @param tag
*/
public TIFFField getField(TIFFTag tag) {
for (TIFFNode node:getChildren()) {
if (node instanceof TIFFField) {
if (node.getTag()==tag) {
return (TIFFField) node;
}
}
}
return null;
}
/** Returns the value of the TIFFField with the specified tag. If a child node with
* this tag exists.
* @param tag
*/
public Object getData(TIFFTag tag) {
TIFFField field=getField(tag);
return field==null?null:field.getData();
}
@Override
public String toString() {
return "TIFFDirectory "+tagSet;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy