001: /*
002: * $RCSfile: RookIter.java,v $
003: *
004: * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved.
005: *
006: * Use is subject to license terms.
007: *
008: * $Revision: 1.1 $
009: * $Date: 2005/02/11 04:57:27 $
010: * $State: Exp $
011: */
012: package javax.media.jai.iterator;
013:
014: /**
015: * An iterator for traversing a read-only image using arbitrary
016: * up-down and left-right moves. This will generally be somewhat
017: * slower than a corresponding instance of RectIter, since it must
018: * perform bounds checks against the top and left edges of tiles in
019: * addition to their bottom and right edges.
020: *
021: * <p> The iterator is initialized with a particular rectangle as its
022: * bounds, which it is illegal to exceed. This initialization takes
023: * place in a factory method and is not a part of the iterator
024: * interface itself. Once initialized, the iterator may be reset to
025: * its initial state by means of the startLine(), startPixels(), and
026: * startBands() methods. As with RectIter, its position may be
027: * advanced using the nextLine(), jumpLines(), nextPixel(),
028: * jumpPixels(), and nextBand() methods.
029: *
030: * <p> In addition, prevLine(), prevPixel(), and prevBand() methods
031: * exist to move in the upwards and leftwards directions and to access
032: * smaller band indices. The iterator may be set to the far edges of
033: * the bounding rectangle by means of the endLines(), endPixels(), and
034: * endBands() methods.
035: *
036: * <p> The iterator's position may be tested against the bounding
037: * rectangle by means of the finishedLines(), finishedPixels(), and
038: * finishedBands() methods, as well as the hybrid methods
039: * nextLineDone(), prevLineDone(), nextPixelDone(), prevPixelDone(),
040: * nextBandDone(), and prevBandDone().
041: *
042: * <p> The getSample(), getSampleFloat(), and getSampleDouble()
043: * methods are provided to allow read-only access to the source data.
044: * The various source bands may also be accessed in random fashion
045: * using the variants that accept a band index. The getPixel() methods
046: * allow retrieval of all bands simultaneously.
047: *
048: * <p> An instance of RookIter may be obtained by means
049: * of the RookIterFactory.create() method, which returns
050: * an opaque object implementing this interface.
051: *
052: * @see RectIter
053: * @see RookIterFactory
054: */
055: public interface RookIter extends RectIter {
056:
057: /**
058: * Sets the iterator to the previous line of the image. The pixel
059: * and band offsets are unchanged. If the iterator passes the
060: * top line of the rectangle, calls to get() methods are not
061: * valid.
062: */
063: public void prevLine();
064:
065: /**
066: * Sets the iterator to the previous line in the image, and
067: * returns true if the top row of the bounding rectangle has
068: * been passed.
069: */
070: public boolean prevLineDone();
071:
072: /**
073: * Sets the iterator to the last line of its bounding rectangle.
074: * The pixel and band offsets are unchanged.
075: */
076: void endLines();
077:
078: /**
079: * Sets the iterator to the previous pixel in the image (that is,
080: * move leftward). The line and band offsets are unchanged.
081: */
082: public void prevPixel();
083:
084: /**
085: * Sets the iterator to the previous pixel in the image (that is,
086: * move leftward). Returns true if the left edge of the bounding
087: * rectangle has been passed. The line and band offsets are
088: * unchanged.
089: */
090: public boolean prevPixelDone();
091:
092: /**
093: * Sets the iterator to the rightmost pixel of its bounding rectangle.
094: * The line and band offsets are unchanged.
095: */
096: void endPixels();
097:
098: /**
099: * Sets the iterator to the previous band in the image.
100: * The pixel column and line are unchanged.
101: */
102: void prevBand();
103:
104: /**
105: * Sets the iterator to the previous band in the image, and
106: * returns true if the min band has been exceeded. The pixel
107: * column and line are unchanged.
108: */
109: boolean prevBandDone();
110:
111: /**
112: * Sets the iterator to the last band of the image.
113: * The pixel column and line are unchanged.
114: */
115: void endBands();
116: }
|