diff options
Diffstat (limited to 'libjava/classpath/javax/imageio/ImageReader.java')
-rw-r--r-- | libjava/classpath/javax/imageio/ImageReader.java | 2035 |
1 files changed, 0 insertions, 2035 deletions
diff --git a/libjava/classpath/javax/imageio/ImageReader.java b/libjava/classpath/javax/imageio/ImageReader.java deleted file mode 100644 index 14e9359..0000000 --- a/libjava/classpath/javax/imageio/ImageReader.java +++ /dev/null @@ -1,2035 +0,0 @@ -/* ImageReader.java -- Decodes raster images. - Copyright (C) 2004, 2005 Free Software Foundation, Inc. - -This file is part of GNU Classpath. - -GNU Classpath is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2, or (at your option) -any later version. - -GNU Classpath is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -General Public License for more details. - -You should have received a copy of the GNU General Public License -along with GNU Classpath; see the file COPYING. If not, write to the -Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -02110-1301 USA. - -Linking this library statically or dynamically with other modules is -making a combined work based on this library. Thus, the terms and -conditions of the GNU General Public License cover the whole -combination. - -As a special exception, the copyright holders of this library give you -permission to link this library with independent modules to produce an -executable, regardless of the license terms of these independent -modules, and to copy and distribute the resulting executable under -terms of your choice, provided that you also meet, for each linked -independent module, the terms and conditions of the license of that -module. An independent module is a module which is not derived from -or based on this library. If you modify this library, you may extend -this exception to your version of the library, but you are not -obligated to do so. If you do not wish to do so, delete this -exception statement from your version. */ - - -package javax.imageio; - -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.image.BufferedImage; -import java.awt.image.Raster; -import java.awt.image.RenderedImage; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Locale; -import java.util.ResourceBundle; -import java.util.MissingResourceException; -import java.util.Set; - -import javax.imageio.event.IIOReadProgressListener; -import javax.imageio.event.IIOReadUpdateListener; -import javax.imageio.event.IIOReadWarningListener; -import javax.imageio.metadata.IIOMetadata; -import javax.imageio.spi.ImageReaderSpi; -import javax.imageio.stream.ImageInputStream; - -/** - * A class for decoding images within the ImageIO framework. - * - * An ImageReader for a given format is instantiated by an - * ImageReaderSpi for that format. ImageReaderSpis are registered - * with the IIORegistry. - * - * The ImageReader API supports reading animated images that may have - * multiple frames; to support such images many methods take an index - * parameter. - * - * Images may also be read in multiple passes, where each successive - * pass increases the level of detail in the destination image. - */ -public abstract class ImageReader -{ - private boolean aborted; - - /** - * All locales available for localization of warning messages, or - * null if localization is not supported. - */ - protected Locale[] availableLocales = null; - - /** - * true if the input source does not require metadata to be read, - * false otherwise. - */ - protected boolean ignoreMetadata = false; - - /** - * An ImageInputStream from which image data is read. - */ - protected Object input = null; - - /** - * The current locale used to localize warning messages, or null if - * no locale has been set. - */ - protected Locale locale = null; - - /** - * The minimum index at which data can be read. Constantly 0 if - * seekForwardOnly is false, always increasing if seekForwardOnly is - * true. - */ - protected int minIndex = 0; - - /** - * The image reader SPI that instantiated this reader. - */ - protected ImageReaderSpi originatingProvider = null; - - /** - * A list of installed progress listeners. Initially null, meaning - * no installed listeners. - */ - protected List<IIOReadProgressListener> progressListeners = null; - - /** - * true if this reader should only read data further ahead in the - * stream than its current location. false if it can read backwards - * in the stream. If this is true then caching can be avoided. - */ - protected boolean seekForwardOnly = false; - - /** - * A list of installed update listeners. Initially null, meaning no - * installed listeners. - */ - protected List<IIOReadUpdateListener> updateListeners = null; - - /** - * A list of installed warning listeners. Initially null, meaning - * no installed listeners. - */ - protected List<IIOReadWarningListener> warningListeners = null; - - /** - * A list of warning locales corresponding with the list of - * installed warning listeners. Initially null, meaning no locales. - */ - protected List<Locale> warningLocales = null; - - /** - * Construct an image reader. - * - * @param originatingProvider the provider that is constructing this - * image reader, or null - */ - protected ImageReader(ImageReaderSpi originatingProvider) - { - this.originatingProvider = originatingProvider; - } - - /** - * Request that reading be aborted. The unread contents of the - * image will be undefined. - * - * Readers should clear the abort flag before starting a read - * operation, then poll it periodically during the read operation. - */ - public void abort() - { - aborted = true; - } - - /** - * Check if the abort flag is set. - * - * @return true if the current read operation should be aborted, - * false otherwise - */ - protected boolean abortRequested() - { - return aborted; - } - - /** - * Install a read progress listener. This method will return - * immediately if listener is null. - * - * @param listener a read progress listener or null - */ - public void addIIOReadProgressListener(IIOReadProgressListener listener) - { - if (listener == null) - return; - if (progressListeners == null) - progressListeners = new ArrayList (); - progressListeners.add(listener); - } - - /** - * Install a read update listener. This method will return - * immediately if listener is null. - * - * @param listener a read update listener - */ - public void addIIOReadUpdateListener(IIOReadUpdateListener listener) - { - if (listener == null) - return; - if (updateListeners == null) - updateListeners = new ArrayList (); - updateListeners.add(listener); - } - - /** - * Install a read warning listener. This method will return - * immediately if listener is null. Warning messages sent to this - * listener will be localized using the current locale. If the - * current locale is null then this reader will select a sensible - * default. - * - * @param listener a read warning listener - */ - public void addIIOReadWarningListener(IIOReadWarningListener listener) - { - if (listener == null) - return; - if (warningListeners == null) - warningListeners = new ArrayList (); - warningListeners.add(listener); - } - - /** - * Check if this reader can handle raster data. Determines whether - * or not readRaster and readTileRaster throw - * UnsupportedOperationException. - * - * @return true if this reader supports raster data, false if not - */ - public boolean canReadRaster() - { - return false; - } - - /** - * Clear the abort flag. - */ - protected void clearAbortRequest() - { - aborted = false; - } - - /** - * Releases any resources allocated to this object. Subsequent - * calls to methods on this object will produce undefined results. - * - * The default implementation does nothing; subclasses should use - * this method ensure that native resources are released. - */ - public void dispose() - { - // The default implementation does nothing. - } - - /** - * Returns the aspect ratio of this image, the ration of its width - * to its height. The aspect ratio is useful when resizing an image - * while keeping its proportions constant. - * - * @param imageIndex the frame index - * - * @return the image's aspect ratio - * - * @exception IllegalStateException if input is null - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public float getAspectRatio(int imageIndex) - throws IOException - { - if (input == null) - throw new IllegalStateException("input is null"); - - return (float) (getWidth(imageIndex) / getHeight(imageIndex)); - } - - /** - * Retrieve the available locales. Return null if no locales are - * available or a clone of availableLocales. - * - * @return an array of locales or null - */ - public Locale[] getAvailableLocales() - { - if (availableLocales == null) - return null; - - return (Locale[]) availableLocales.clone(); - } - - /** - * Retrieve the default read parameters for this reader's image - * format. - * - * The default implementation returns new ImageReadParam(). - * - * @return image reading parameters - */ - public ImageReadParam getDefaultReadParam() - { - return new ImageReadParam(); - } - - /** - * Retrieve the format of the input source. - * - * @return the input source format name - * - * @exception IOException if a read error occurs - */ - public String getFormatName() - throws IOException - { - return originatingProvider.getFormatNames()[0]; - } - - /** - * Get the height of the input image in pixels. If the input image - * is resizable then a default height is returned. - * - * @param imageIndex the frame index - * - * @return the height of the input image - * - * @exception IllegalStateException if input has not been set - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public abstract int getHeight(int imageIndex) - throws IOException; - - /** - * Get the metadata associated with this image. If the reader is - * set to ignore metadata or does not support reading metadata, or - * if no metadata is available then null is returned. - * - * @param imageIndex the frame index - * - * @return a metadata object, or null - * - * @exception IllegalStateException if input has not been set - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public abstract IIOMetadata getImageMetadata(int imageIndex) - throws IOException; - - /** - * Get an iterator over the collection of image types into which - * this reader can decode image data. This method is guaranteed to - * return at least one valid image type specifier. - * - * The elements of the iterator should be ordered; the first element - * should be the most appropriate image type for this decoder, - * followed by the second-most appropriate, and so on. - * - * @param imageIndex the frame index - * - * @return an iterator over a collection of image type specifiers - * - * @exception IllegalStateException if input has not been set - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public abstract Iterator<ImageTypeSpecifier> getImageTypes(int imageIndex) - throws IOException; - - /** - * Set the input source to the given object, specify whether this - * reader should be allowed to read input from the data stream more - * than once, and specify whether this reader should ignore metadata - * in the input stream. The input source must be set before many - * methods can be called on this reader. (see all ImageReader - * methods that throw IllegalStateException). If input is null then - * the current input source will be removed. - * - * Unless this reader has direct access with imaging hardware, input - * should be an ImageInputStream. - * - * @param input the input source object - * @param seekForwardOnly true if this reader should be allowed to - * read input from the data stream more than once, false otherwise - * @param ignoreMetadata true if this reader should ignore metadata - * associated with the input source, false otherwise - * - * @exception IllegalArgumentException if input is not a valid input - * source for this reader and is not an ImageInputStream - */ - public void setInput(Object input, - boolean seekForwardOnly, - boolean ignoreMetadata) - { - Class[] okClasses = originatingProvider.getInputTypes(); - if (okClasses == null) - { - if (!(input instanceof ImageInputStream)) - throw new IllegalArgumentException(); - } - else - { - boolean classOk = false; - for (int i = 0; i < okClasses.length; ++i) - if (okClasses[i].isInstance(input)) - classOk = true; - if (!classOk) - throw new IllegalArgumentException(); - } - - this.input = input; - this.seekForwardOnly = seekForwardOnly; - this.ignoreMetadata = ignoreMetadata; - this.minIndex = 0; - } - - /** - * Set the input source to the given object and specify whether this - * reader should be allowed to read input from the data stream more - * than once. The input source must be set before many methods can - * be called on this reader. (see all ImageReader methods that throw - * IllegalStateException). If input is null then the current input - * source will be removed. - * - * @param in the input source object - * @param seekForwardOnly true if this reader should be allowed to - * read input from the data stream more than once, false otherwise - * - * @exception IllegalArgumentException if input is not a valid input - * source for this reader and is not an ImageInputStream - */ - public void setInput(Object in, boolean seekForwardOnly) - { - setInput(in, seekForwardOnly, false); - } - - /** - * Set the input source to the given object. The input source must - * be set before many methods can be called on this reader. (see all - * ImageReader methods that throw IllegalStateException). If input - * is null then the current input source will be removed. - * - * @param input the input source object - * - * @exception IllegalArgumentException if input is not a valid input - * source for this reader and is not an ImageInputStream - */ - public void setInput(Object input) - { - setInput(input, false, false); - } - - /** - * Get this reader's image input source. null is returned if the - * image source has not been set. - * - * @return an image input source object, or null - */ - public Object getInput() - { - return input; - } - - /** - * Get this reader's locale. null is returned if the locale has not - * been set. - * - * @return this reader's locale, or null - */ - public Locale getLocale() - { - return locale; - } - - /** - * Return the number of images available from the image input - * source, not including thumbnails. This method will return 1 - * unless this reader is reading an animated image. - * - * Certain multi-image formats do not encode the total number of - * images. When reading images in those formats it may be necessary - * to repeatedly call read, incrementing the image index at each - * call, until an IndexOutOfBoundsException is thrown. - * - * The allowSearch parameter determines whether all images must be - * available at all times. When allowSearch is false, getNumImages - * will return -1 if the total number of images is unknown. - * Otherwise this method returns the number of images. - * - * @param allowSearch true if all images should be available at - * once, false otherwise - * - * @return -1 if allowSearch is false and the total number of images - * is currently unknown, or the number of images - * - * @exception IllegalStateException if input has not been set, or if - * seekForwardOnly is true - * @exception IOException if a read error occurs - */ - public abstract int getNumImages(boolean allowSearch) - throws IOException; - - /** - * Get the number of thumbnails associated with an image. - * - * @param imageIndex the frame index - * - * @return the number of thumbnails associated with this image - */ - public int getNumThumbnails(int imageIndex) - throws IOException - { - return 0; - } - - /** - * Get the ImageReaderSpi that created this reader or null. - * - * @return an ImageReaderSpi, or null - */ - public ImageReaderSpi getOriginatingProvider() - { - return originatingProvider; - } - - /** - * Get the metadata associated with the image being read. If the - * reader is set to ignore metadata or does not support reading - * metadata, or if no metadata is available then null is returned. - * This method returns metadata associated with the entirety of the - * image data, whereas getImageMetadata(int) returns metadata - * associated with a frame within a multi-image data stream. - * - * @return metadata associated with the image being read, or null - * - * @exception IOException if a read error occurs - */ - public abstract IIOMetadata getStreamMetadata() - throws IOException; - - /** - * Get the height of a thumbnail image. - * - * @param imageIndex the frame index - * @param thumbnailIndex the thumbnail index - * - * @return the height of the thumbnail image - * - * @exception UnsupportedOperationException if this reader does not - * support thumbnails - * @exception IllegalStateException if input is null - * @exception IndexOutOfBoundsException if either index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public int getThumbnailHeight(int imageIndex, int thumbnailIndex) - throws IOException - { - return readThumbnail(imageIndex, thumbnailIndex).getHeight(); - } - - /** - * Get the width of a thumbnail image. - * - * @param imageIndex the frame index - * @param thumbnailIndex the thumbnail index - * - * @return the width of the thumbnail image - * - * @exception UnsupportedOperationException if this reader does not - * support thumbnails - * @exception IllegalStateException if input is null - * @exception IndexOutOfBoundsException if either index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public int getThumbnailWidth(int imageIndex, int thumbnailIndex) - throws IOException - { - return readThumbnail(imageIndex, thumbnailIndex).getWidth(); - } - - /** - * Get the X coordinate in pixels of the top-left corner of the - * first tile in this image. - * - * @param imageIndex the frame index - * - * @return the X coordinate of this image's first tile - * - * @exception IllegalStateException if input is needed but the input - * source is not set - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public int getTileGridXOffset(int imageIndex) - throws IOException - { - return 0; - } - - /** - * Get the Y coordinate in pixels of the top-left corner of the - * first tile in this image. - * - * @param imageIndex the frame index - * - * @return the Y coordinate of this image's first tile - * - * @exception IllegalStateException if input is needed but the input - * source is not set - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public int getTileGridYOffset(int imageIndex) - throws IOException - { - return 0; - } - - /** - * Get the height of an image tile. - * - * @param imageIndex the frame index - * - * @return the tile height for the given image - * - * @exception IllegalStateException if input is null - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public int getTileHeight(int imageIndex) - throws IOException - { - return getHeight(imageIndex); - } - - /** - * Get the width of an image tile. - * - * @param imageIndex the frame index - * - * @return the tile width for the given image - * - * @exception IllegalStateException if input is null - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public int getTileWidth(int imageIndex) - throws IOException - { - return getWidth(imageIndex); - } - - /** - * Get the width of the input image in pixels. If the input image - * is resizable then a default width is returned. - * - * @param imageIndex the image's index - * - * @return the width of the input image - * - * @exception IllegalStateException if input has not been set - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public abstract int getWidth(int imageIndex) - throws IOException; - - /** - * Check whether or not the given image has thumbnails associated - * with it. - * - * @return true if the given image has thumbnails, false otherwise - * - * @exception IllegalStateException if input is null - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public boolean hasThumbnails(int imageIndex) - throws IOException - { - return getNumThumbnails(imageIndex) > 0; - } - - /** - * Check if this image reader ignores metadata. This method simply - * returns the value of ignoreMetadata. - * - * @return true if metadata is being ignored, false otherwise - */ - public boolean isIgnoringMetadata() - { - return ignoreMetadata; - } - - /** - * Check if the given image is sub-divided into equal-sized - * non-overlapping pixel rectangles. - * - * A reader may expose tiling in the underlying format, hide it, or - * simulate tiling even if the underlying format is not tiled. - * - * @return true if the given image is tiled, false otherwise - * - * @exception IllegalStateException if input is null - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public boolean isImageTiled(int imageIndex) - throws IOException - { - return false; - } - - /** - * Check if all pixels in this image are readily accessible. This - * method should return false for compressed formats. The return - * value is a hint as to the efficiency of certain image reader - * operations. - * - * @param imageIndex the frame index - * - * @return true if random pixel access is fast, false otherwise - * - * @exception IllegalStateException if input is null and it is - * needed to determine the return value - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds but the frame data must be accessed to determine - * the return value - * @exception IOException if a read error occurs - */ - public boolean isRandomAccessEasy(int imageIndex) - throws IOException - { - return false; - } - - /** - * Check if this image reader may only seek forward within the input - * stream. - * - * @return true if this reader may only seek forward, false - * otherwise - */ - public boolean isSeekForwardOnly() - { - return seekForwardOnly; - } - - /** - * Notifies all installed read progress listeners that image loading - * has completed by calling their imageComplete methods. - */ - protected void processImageComplete() - { - if (progressListeners != null) - { - Iterator it = progressListeners.iterator(); - - while (it.hasNext()) - { - IIOReadProgressListener listener = - (IIOReadProgressListener) it.next(); - listener.imageComplete (this); - } - } - } - - /** - * Notifies all installed read progress listeners that a certain - * percentage of the image has been loaded, by calling their - * imageProgress methods. - * - * @param percentageDone the percentage of image data that has been - * loaded - */ - protected void processImageProgress(float percentageDone) - { - if (progressListeners != null) - { - Iterator it = progressListeners.iterator(); - - while (it.hasNext()) - { - IIOReadProgressListener listener = - (IIOReadProgressListener) it.next(); - listener.imageProgress(this, percentageDone); - } - } - } - /** - * Notifies all installed read progress listeners, by calling their - * imageStarted methods, that image loading has started on the given - * image. - * - * @param imageIndex the frame index of the image that has started - * loading - */ - protected void processImageStarted(int imageIndex) - { - if (progressListeners != null) - { - Iterator it = progressListeners.iterator(); - - while (it.hasNext()) - { - IIOReadProgressListener listener = - (IIOReadProgressListener) it.next(); - listener.imageStarted(this, imageIndex); - } - } - } - - /** - * Notifies all installed read update listeners, by calling their - * imageUpdate methods, that the set of samples has changed. - * - * @param image the buffered image that is being updated - * @param minX the X coordinate of the top-left pixel in this pass - * @param minY the Y coordinate of the top-left pixel in this pass - * @param width the total width of the rectangle covered by this - * pass, including skipped pixels - * @param height the total height of the rectangle covered by this - * pass, including skipped pixels - * @param periodX the horizontal sample interval - * @param periodY the vertical sample interval - * @param bands the affected bands in the destination - */ - protected void processImageUpdate(BufferedImage image, int minX, int minY, - int width, int height, int periodX, - int periodY, int[] bands) - { - if (updateListeners != null) - { - Iterator it = updateListeners.iterator(); - - while (it.hasNext()) - { - IIOReadUpdateListener listener = (IIOReadUpdateListener) it.next(); - listener.imageUpdate(this, image, minX, minY, width, height, - periodX, periodY, bands); - } - } - } - - /** - * Notifies all installed update progress listeners, by calling - * their passComplete methods, that a progressive pass has - * completed. - * - * @param image the image that has being updated - */ - protected void processPassComplete(BufferedImage image) - { - if (updateListeners != null) - { - Iterator it = updateListeners.iterator(); - - while (it.hasNext()) - { - IIOReadUpdateListener listener = (IIOReadUpdateListener) it.next(); - listener.passComplete(this, image); - } - } - } - - /** - * Notifies all installed read update listeners, by calling their - * passStarted methods, that a new pass has begun. - * - * @param image the buffered image that is being updated - * @param pass the current pass number - * @param minPass the pass at which decoding will begin - * @param maxPass the pass at which decoding will end - * @param minX the X coordinate of the top-left pixel in this pass - * @param minY the Y coordinate of the top-left pixel in this pass - * @param width the total width of the rectangle covered by this - * pass, including skipped pixels - * @param height the total height of the rectangle covered by this - * pass, including skipped pixels - * @param periodX the horizontal sample interval - * @param periodY the vertical sample interval - * @param bands the affected bands in the destination - */ - protected void processPassStarted(BufferedImage image, int pass, int minPass, - int maxPass, int minX, int minY, - int periodX, int periodY, int[] bands) - { - if (updateListeners != null) - { - Iterator it = updateListeners.iterator(); - - while (it.hasNext()) - { - IIOReadUpdateListener listener = (IIOReadUpdateListener) it.next(); - listener.passStarted(this, image, pass, minPass, maxPass, minX, - minY, periodX, periodY, bands); - } - } - } - - /** - * Notifies all installed read progress listeners that image loading - * has been aborted by calling their readAborted methods. - */ - protected void processReadAborted() - { - if (progressListeners != null) - { - Iterator it = progressListeners.iterator(); - - while (it.hasNext()) - { - IIOReadProgressListener listener = - (IIOReadProgressListener) it.next(); - listener.readAborted(this); - } - } - } - /** - * Notifies all installed read progress listeners, by calling their - * sequenceComplete methods, that a sequence of images has completed - * loading. - */ - protected void processSequenceComplete() - { - if (progressListeners != null) - { - Iterator it = progressListeners.iterator(); - - while (it.hasNext()) - { - IIOReadProgressListener listener = - (IIOReadProgressListener) it.next(); - listener.sequenceComplete(this); - } - } - } - - /** - * Notifies all installed read progress listeners, by calling their - * sequenceStarted methods, a sequence of images has started - * loading. - * - * @param minIndex the index of the first image in the sequence - */ - protected void processSequenceStarted(int minIndex) - { - - if (progressListeners != null) - { - Iterator it = progressListeners.iterator(); - - while (it.hasNext()) - { - IIOReadProgressListener listener = - (IIOReadProgressListener) it.next(); - listener.sequenceStarted(this, minIndex); - } - } - } - - /** - * Notifies all installed read progress listeners, by calling their - * thumbnailComplete methods, that a thumbnail has completed - * loading. - */ - protected void processThumbnailComplete() - { - if (progressListeners != null) - { - Iterator it = progressListeners.iterator(); - - while (it.hasNext()) - { - IIOReadProgressListener listener = - (IIOReadProgressListener) it.next(); - listener.thumbnailComplete(this); - } - } - } - - /** - * Notifies all installed update progress listeners, by calling - * their thumbnailPassComplete methods, that a progressive pass has - * completed on a thumbnail. - * - * @param thumbnail the thumbnail that has being updated - */ - protected void processThumbnailPassComplete(BufferedImage thumbnail) - { - if (updateListeners != null) - { - Iterator it = updateListeners.iterator(); - - while (it.hasNext()) - { - IIOReadUpdateListener listener = (IIOReadUpdateListener) it.next(); - listener.thumbnailPassComplete(this, thumbnail); - } - } - } - - /** - * Notifies all installed read update listeners, by calling their - * thumbnailPassStarted methods, that a new pass has begun. - * - * @param thumbnail the thumbnail that is being updated - * @param pass the current pass number - * @param minPass the pass at which decoding will begin - * @param maxPass the pass at which decoding will end - * @param minX the X coordinate of the top-left pixel in this pass - * @param minY the Y coordinate of the top-left pixel in this pass - * @param width the total width of the rectangle covered by this - * pass, including skipped pixels - * @param height the total height of the rectangle covered by this - * pass, including skipped pixels - * @param periodX the horizontal sample interval - * @param periodY the vertical sample interval - * @param bands the affected bands in the destination - */ - protected void processThumbnailPassStarted(BufferedImage thumbnail, int pass, - int minPass, int maxPass, int minX, - int minY, int periodX, int periodY, - int[] bands) - { - if (updateListeners != null) - { - Iterator it = updateListeners.iterator(); - - while (it.hasNext()) - { - IIOReadUpdateListener listener = (IIOReadUpdateListener) it.next(); - listener.thumbnailPassStarted(this, thumbnail, pass, minPass, - maxPass, minX, minY, periodX, - periodY, bands); - } - } - } - - /** - * Notifies all installed read progress listeners that a certain - * percentage of a thumbnail has been loaded, by calling their - * thumbnailProgress methods. - * - * @param percentageDone the percentage of thumbnail data that has - * been loaded - */ - protected void processThumbnailProgress(float percentageDone) - { - if (progressListeners != null) - { - Iterator it = progressListeners.iterator(); - - while (it.hasNext()) - { - IIOReadProgressListener listener = - (IIOReadProgressListener) it.next(); - listener.thumbnailProgress(this, percentageDone); - } - } - } - - /** - * Notifies all installed read progress listeners, by calling their - * imageStarted methods, that thumbnail loading has started on the - * given thumbnail of the given image. - * - * @param imageIndex the frame index of the image one of who's - * thumbnails has started loading - * @param thumbnailIndex the index of the thumbnail that has started - * loading - */ - protected void processThumbnailStarted(int imageIndex, int thumbnailIndex) - { - if (progressListeners != null) - { - Iterator it = progressListeners.iterator(); - - while (it.hasNext()) - { - IIOReadProgressListener listener = - (IIOReadProgressListener) it.next(); - listener.thumbnailStarted(this, imageIndex, thumbnailIndex); - } - } - } - - /** - * Notifies all installed read update listeners, by calling their - * thumbnailUpdate methods, that the set of samples has changed. - * - * @param image the buffered image that is being updated - * @param minX the X coordinate of the top-left pixel in this pass - * @param minY the Y coordinate of the top-left pixel in this pass - * @param width the total width of the rectangle covered by this - * pass, including skipped pixels - * @param height the total height of the rectangle covered by this - * pass, including skipped pixels - * @param periodX the horizontal sample interval - * @param periodY the vertical sample interval - * @param bands the affected bands in the destination - */ - protected void processThumbnailUpdate(BufferedImage image, int minX, int minY, - int width, int height, int periodX, - int periodY, int[] bands) - { - if (updateListeners != null) - { - Iterator it = updateListeners.iterator(); - - while (it.hasNext()) - { - IIOReadUpdateListener listener = (IIOReadUpdateListener) it.next(); - listener.thumbnailUpdate(this, image, minX, minY, width, height, - periodX, periodY, bands); - } - } - } - - /** - * Notifies all installed warning listeners, by calling their - * warningOccurred methods, that a warning message has been raised. - * - * @param warning the warning message - * - * @exception IllegalArgumentException if warning is null - */ - protected void processWarningOccurred(String warning) - { - if (warning == null) - throw new IllegalArgumentException ("null argument"); - if (warningListeners != null) - { - Iterator it = warningListeners.iterator(); - - while (it.hasNext()) - { - IIOReadWarningListener listener = - (IIOReadWarningListener) it.next(); - listener.warningOccurred(this, warning); - } - } - } - - /** - * Notify all installed warning listeners, by calling their - * warningOccurred methods, that a warning message has been raised. - * The warning message is retrieved from a resource bundle, using - * the given basename and keyword. - * - * @param baseName the basename of the resource from which to - * retrieve the warning message - * @param keyword the keyword used to retrieve the warning from the - * resource bundle - * - * @exception IllegalArgumentException if either baseName or keyword - * is null - * @exception IllegalArgumentException if no resource bundle is - * found using baseName - * @exception IllegalArgumentException if the given keyword produces - * no results from the resource bundle - * @exception IllegalArgumentException if the retrieved object is - * not a String - */ - protected void processWarningOccurred(String baseName, - String keyword) - { - if (baseName == null || keyword == null) - throw new IllegalArgumentException ("null argument"); - - ResourceBundle b = null; - - try - { - b = ResourceBundle.getBundle(baseName, getLocale()); - } - catch (MissingResourceException e) - { - throw new IllegalArgumentException ("no resource bundle found"); - } - - Object str = null; - - try - { - str = b.getObject(keyword); - } - catch (MissingResourceException e) - { - throw new IllegalArgumentException ("no results found for keyword"); - } - - if (! (str instanceof String)) - throw new IllegalArgumentException ("retrieved object not a String"); - - String warning = (String) str; - - if (warningListeners != null) - { - Iterator it = warningListeners.iterator(); - - while (it.hasNext()) - { - IIOReadWarningListener listener = - (IIOReadWarningListener) it.next(); - listener.warningOccurred(this, warning); - } - } - } - - /** - * Read the given frame into a buffered image using the given read - * parameters. Listeners will be notified of image loading progress - * and warnings. - * - * @param imageIndex the index of the frame to read - * @param param the image read parameters to use when reading - * - * @return a buffered image - * - * @exception IllegalStateException if input is null - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public abstract BufferedImage read(int imageIndex, ImageReadParam param) - throws IOException; - - /** - * Check if this reader supports reading thumbnails. - * - * @return true if this reader supports reading thumbnails, false - * otherwise - */ - public boolean readerSupportsThumbnails() - { - return false; - } - - /** - * Read raw raster data. The image type specifier in param is - * ignored but all other parameters are used. Offset parameters are - * translated into the raster's coordinate space. This method may - * be implemented by image readers that want to provide direct - * access to raw image data. - * - * @param imageIndex the frame index - * @param param the image read parameters - * - * @return a raster containing the read image data - * - * @exception UnsupportedOperationException if this reader doesn't - * support rasters - * @exception IllegalStateException if input is null - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public Raster readRaster(int imageIndex, ImageReadParam param) - throws IOException - { - throw new UnsupportedOperationException(); - } - - /** - * Read a thumbnail. - * - * @param imageIndex the frame index - * @param thumbnailIndex the thumbnail index - * - * @return a buffered image of the thumbnail - * - * @exception UnsupportedOperationException if this reader doesn't - * support thumbnails - * @exception IllegalStateException if input is null - * @exception IndexOutOfBoundsException if either the frame index or - * the thumbnail index is out-of-bounds - * @exception IOException if a read error occurs - * - */ - public BufferedImage readThumbnail(int imageIndex, int thumbnailIndex) - throws IOException - { - throw new UnsupportedOperationException(); - } - - /** - * Uninstall all read progress listeners. - */ - public void removeAllIIOReadProgressListeners() - { - progressListeners = null; - } - - /** - * Uninstall all read update listeners. - */ - public void removeAllIIOReadUpdateListeners() - { - updateListeners = null; - } - - /** - * Uninstall all read warning listeners. - */ - public void removeAllIIOReadWarningListeners() - { - warningListeners = null; - } - - /** - * Uninstall the given read progress listener. - * - * @param listener the listener to remove - */ - public void removeIIOReadProgressListener(IIOReadProgressListener listener) - { - if (listener == null) - return; - if (progressListeners != null) - { - progressListeners.remove(listener); - } - } - - /** - * Uninstall the given read update listener. - * - * @param listener the listener to remove - */ - public void removeIIOReadUpdateListener(IIOReadUpdateListener listener) - { - if (listener == null) - return; - - if (updateListeners != null) - { - updateListeners.remove(listener); - } - } - - /** - * Uninstall the given read warning listener. - * - * @param listener the listener to remove - */ - public void removeIIOReadWarningListener(IIOReadWarningListener listener) - { - if (listener == null) - return; - if (warningListeners != null) - { - warningListeners.remove(listener); - } - } - - /** - * Set the current locale or use the default locale. - * - * @param locale the locale to set, or null - */ - public void setLocale(Locale locale) - { - if (locale != null) - { - // Check if its a valid locale. - boolean found = false; - - if (availableLocales != null) - for (int i = availableLocales.length - 1; i >= 0; --i) - if (availableLocales[i].equals(locale)) - found = true; - - if (! found) - throw new IllegalArgumentException("looale not available"); - } - - this.locale = locale; - } - - /** - * Check that the given read parameters have valid source and - * destination band settings. If the param.getSourceBands() returns - * null, the array is assumed to include all band indices, 0 to - * numSrcBands - 1; likewise if param.getDestinationBands() returns - * null, it is assumed to be an array containing indices 0 to - * numDstBands - 1. A failure will cause this method to throw - * IllegalArgumentException. - * - * @param param the image parameters to check - * @param numSrcBands the number of input source bands - * @param numDstBands the number of ouput destination bands - * - * @exception IllegalArgumentException if either the given source or - * destination band indices are invalid - */ - protected static void checkReadParamBandSettings(ImageReadParam param, - int numSrcBands, - int numDstBands) - { - int[] srcBands = param.getSourceBands(); - int[] dstBands = param.getDestinationBands(); - boolean lengthsDiffer = false; - boolean srcOOB = false; - boolean dstOOB = false; - - if (srcBands == null) - { - if (dstBands == null) - { - if (numSrcBands != numDstBands) - lengthsDiffer = true; - } - else - { - if (numSrcBands != dstBands.length) - lengthsDiffer = true; - - for (int i = 0; i < dstBands.length; i++) - if (dstBands[i] > numSrcBands - 1) - { - dstOOB = true; - break; - } - } - } - else - { - if (dstBands == null) - { - if (srcBands.length != numDstBands) - lengthsDiffer = true; - - for (int i = 0; i < srcBands.length; i++) - if (srcBands[i] > numDstBands - 1) - { - srcOOB = true; - break; - } - } - else - { - if (srcBands.length != dstBands.length) - lengthsDiffer = true; - - for (int i = 0; i < srcBands.length; i++) - if (srcBands[i] > numDstBands - 1) - { - srcOOB = true; - break; - } - - for (int i = 0; i < dstBands.length; i++) - if (dstBands[i] > numSrcBands - 1) - { - dstOOB = true; - break; - } - } - } - - if (lengthsDiffer) - throw new IllegalArgumentException ("array lengths differ"); - - if (srcOOB) - throw new IllegalArgumentException ("source band index" - + " out-of-bounds"); - - if (dstOOB) - throw new IllegalArgumentException ("destination band index" - + " out-of-bounds"); - } - - /** - * Calcluate the source and destination regions that will be read - * from and written to, given image parameters and/or a destination - * buffered image. The source region will be clipped if any of its - * bounds are outside the destination region. Clipping will account - * for subsampling and destination offsets. Likewise, the - * destination region is clipped to the given destination image, if - * it is not null, using the given image parameters, if they are not - * null. IllegalArgumentException is thrown if either region will - * contain 0 pixels after clipping. - * - * @param param read parameters, or null - * @param srcWidth the width of the source image - * @param srcHeight the height of the source image - * @param image the destination image, or null - * @param srcRegion a rectangle whose values will be set to the - * clipped source region - * @param destRegion a rectangle whose values will be set to the - * clipped destination region - * - * @exception IllegalArgumentException if either srcRegion or - * destRegion is null - * @exception IllegalArgumentException if either of the calculated - * regions is empty - */ - protected static void computeRegions (ImageReadParam param, - int srcWidth, - int srcHeight, - BufferedImage image, - Rectangle srcRegion, - Rectangle destRegion) - { - if (srcRegion == null || destRegion == null) - throw new IllegalArgumentException ("null region"); - - if (srcWidth == 0 || srcHeight == 0) - throw new IllegalArgumentException ("zero-sized region"); - - srcRegion = getSourceRegion(param, srcWidth, srcHeight); - if (image != null) - destRegion = new Rectangle (0, 0, image.getWidth(), image.getHeight()); - else - destRegion = new Rectangle (0, 0, srcWidth, srcHeight); - - if (param != null) - { - Point offset = param.getDestinationOffset(); - - if (offset.x < 0) - { - srcRegion.x -= offset.x; - srcRegion.width += offset.x; - } - if (offset.y < 0) - { - srcRegion.y -= offset.y; - srcRegion.height += offset.y; - } - - srcRegion.width = srcRegion.width > destRegion.width - ? destRegion.width : srcRegion.width; - srcRegion.height = srcRegion.height > destRegion.height - ? destRegion.height : srcRegion.height; - - if (offset.x >= 0) - { - destRegion.x += offset.x; - destRegion.width -= offset.x; - } - if (offset.y >= 0) - { - destRegion.y += offset.y; - destRegion.height -= offset.y; - } - } - - if (srcRegion.isEmpty() || destRegion.isEmpty()) - throw new IllegalArgumentException ("zero-sized region"); - } - - /** - * Return a suitable destination buffered image. If - * param.getDestination() is non-null, then it is returned, - * otherwise a buffered image is created using - * param.getDestinationType() if it is non-null and also in the - * given imageTypes collection, or the first element of imageTypes - * otherwise. - * - * @param param image read parameters from which a destination image - * or image type is retrieved, or null - * @param imageTypes a collection of legal image types - * @param width the width of the source image - * @param height the height of the source image - * - * @return a suitable destination buffered image - * - * @exception IIOException if param.getDestinationType() does not - * return an image type in imageTypes - * @exception IllegalArgumentException if imageTypes is null or - * empty, or if a non-ImageTypeSpecifier object is retrieved from - * imageTypes - * @exception IllegalArgumentException if the resulting destination - * region is empty - * @exception IllegalArgumentException if the product of width and - * height is greater than Integer.MAX_VALUE - */ - protected static BufferedImage getDestination (ImageReadParam param, - Iterator<ImageTypeSpecifier> imageTypes, - int width, - int height) - throws IIOException - { - if (imageTypes == null || !imageTypes.hasNext()) - throw new IllegalArgumentException ("imageTypes null or empty"); - - if (width < 0 || height < 0) - throw new IllegalArgumentException ("negative dimension"); - - // test for overflow - if (width * height < Math.min (width, height)) - throw new IllegalArgumentException ("width * height > Integer.MAX_VALUE"); - - BufferedImage dest = null; - ImageTypeSpecifier destType = null; - - if (param != null) - { - dest = param.getDestination (); - if (dest == null) - { - ImageTypeSpecifier type = param.getDestinationType(); - if (type != null) - { - Iterator it = imageTypes; - - while (it.hasNext()) - { - Object o = it.next (); - if (! (o instanceof ImageTypeSpecifier)) - throw new IllegalArgumentException ("non-ImageTypeSpecifier object"); - - ImageTypeSpecifier t = (ImageTypeSpecifier) o; - if (t.equals (type)) - { - dest = t.createBufferedImage (width, height); - break; - } - if (destType == null) - throw new IIOException ("invalid destination type"); - - } - } - } - } - if (dest == null) - { - Rectangle srcRegion = new Rectangle (); - Rectangle destRegion = new Rectangle (); - - computeRegions (param, width, height, null, srcRegion, destRegion); - - if (destRegion.isEmpty()) - throw new IllegalArgumentException ("destination region empty"); - - if (destType == null) - { - Object o = imageTypes.next(); - if (! (o instanceof ImageTypeSpecifier)) - throw new IllegalArgumentException ("non-ImageTypeSpecifier" - + " object"); - - dest = ((ImageTypeSpecifier) o).createBufferedImage - (destRegion.width, destRegion.height); - } - else - dest = destType.createBufferedImage - (destRegion.width, destRegion.height); - } - return dest; - } - - /** - * Get the metadata associated with this image. If the reader is - * set to ignore metadata or does not support reading metadata, or - * if no metadata is available then null is returned. - * - * This more specific version of getImageMetadata(int) can be used - * to restrict metadata retrieval to specific formats and node - * names, which can limit the amount of data that needs to be - * processed. - * - * @param imageIndex the frame index - * @param formatName the format of metadata requested - * @param nodeNames a set of Strings specifiying node names to be - * retrieved - * - * @return a metadata object, or null - * - * @exception IllegalStateException if input has not been set - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IllegalArgumentException if formatName is null - * @exception IllegalArgumentException if nodeNames is null - * @exception IOException if a read error occurs - */ - public IIOMetadata getImageMetadata (int imageIndex, - String formatName, - Set<String> nodeNames) - throws IOException - { - if (formatName == null || nodeNames == null) - throw new IllegalArgumentException ("null argument"); - - return getImageMetadata (imageIndex); - } - - /** - * Get the index at which the next image will be read. If - * seekForwardOnly is true then the returned value will increase - * monotonically each time an image frame is read. If - * seekForwardOnly is false then the returned value will always be - * 0. - * - * @return the current frame index - */ - public int getMinIndex() - { - return minIndex; - } - - /** - * Get the image type specifier that most closely represents the - * internal data representation used by this reader. This value - * should be included in the return value of getImageTypes. - * - * @param imageIndex the frame index - * - * @return an image type specifier - * - * @exception IllegalStateException if input has not been set - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public ImageTypeSpecifier getRawImageType (int imageIndex) - throws IOException - { - return getImageTypes(imageIndex).next(); - } - - /** - * Calculate a source region based on the given source image - * dimensions and parameters. Subsampling offsets and a source - * region are taken from the given image read parameters and used to - * clip the given image dimensions, returning a new rectangular - * region as a result. - * - * @param param image parameters, or null - * @param srcWidth the width of the source image - * @param srcHeight the height of the source image - * - * @return a clipped rectangle - */ - protected static Rectangle getSourceRegion (ImageReadParam param, - int srcWidth, - int srcHeight) - { - Rectangle clippedRegion = new Rectangle (0, 0, srcWidth, srcHeight); - - if (param != null) - { - Rectangle srcRegion = param.getSourceRegion(); - - if (srcRegion != null) - { - clippedRegion.x = srcRegion.x > clippedRegion.x - ? srcRegion.x : clippedRegion.x; - clippedRegion.y = srcRegion.y > clippedRegion.y - ? srcRegion.y : clippedRegion.y; - clippedRegion.width = srcRegion.width > clippedRegion.width - ? srcRegion.width : clippedRegion.width; - clippedRegion.height = srcRegion.height > clippedRegion.height - ? srcRegion.height : clippedRegion.height; - } - - int xOffset = param.getSubsamplingXOffset(); - - clippedRegion.x += xOffset; - clippedRegion.width -= xOffset; - - int yOffset = param.getSubsamplingYOffset(); - - clippedRegion.y += yOffset; - clippedRegion.height -= yOffset; - } - return clippedRegion; - } - - /** - * Get the metadata associated with the image being read. If the - * reader is set to ignore metadata or does not support reading - * metadata, or if no metadata is available then null is returned. - * This method returns metadata associated with the entirety of the - * image data, whereas getStreamMetadata() returns metadata - * associated with a frame within a multi-image data stream. - * - * This more specific version of getStreamMetadata() can be used to - * restrict metadata retrieval to specific formats and node names, - * which can limit the amount of data that needs to be processed. - * - * @param formatName the format of metadata requested - * @param nodeNames a set of Strings specifiying node names to be - * retrieved - * - * @return metadata associated with the image being read, or null - * - * @exception IllegalArgumentException if formatName is null - * @exception IllegalArgumentException if nodeNames is null - * @exception IOException if a read error occurs - */ - public IIOMetadata getStreamMetadata (String formatName, - Set<String> nodeNames) - throws IOException - { - if (formatName == null || nodeNames == null) - throw new IllegalArgumentException ("null argument"); - - return getStreamMetadata(); - } - - /** - * Read the given frame all at once, using default image read - * parameters, and return a buffered image. - * - * The returned image will be formatted according to the - * currently-preferred image type specifier. - * - * Installed read progress listeners, update progress listeners and - * warning listeners will be notified of read progress, changes in - * sample sets and warnings respectively. - * - * @param imageIndex the index of the image frame to read - * - * @return a buffered image - * - * @exception IllegalStateException if input has not been set - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IOException if a read error occurs - */ - public BufferedImage read (int imageIndex) - throws IOException - { - return read (imageIndex, null); - } - - /** - * Read the given frame all at once, using the given image read - * parameters, and return an IIOImage. The IIOImage will contain a - * buffered image as returned by getDestination. - * - * Installed read progress listeners, update progress listeners and - * warning listeners will be notified of read progress, changes in - * sample sets and warnings respectively. - * - * The source and destination band settings are checked with a call - * to checkReadParamBandSettings. - * - * @param imageIndex the index of the image frame to read - * @param param the image read parameters - * - * @return an IIOImage - * - * @exception IllegalStateException if input has not been set - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IllegalArgumentException if param.getSourceBands() and - * param.getDestinationBands() are incompatible - * @exception IllegalArgumentException if either the source or - * destination image regions are empty - * @exception IOException if a read error occurs - */ - public IIOImage readAll (int imageIndex, - ImageReadParam param) - throws IOException - { - checkReadParamBandSettings (param, - param.getSourceBands().length, - param.getDestinationBands().length); - - List l = new ArrayList (); - - for (int i = 0; i < getNumThumbnails (imageIndex); i++) - l.add (readThumbnail(imageIndex, i)); - - return new IIOImage (getDestination(param, getImageTypes(imageIndex), - getWidth(imageIndex), - getHeight(imageIndex)), - l, - getImageMetadata (imageIndex)); - } - - /** - * Read all image frames all at once, using the given image read - * parameters iterator, and return an iterator over a collection of - * IIOImages. Each IIOImage in the collection will contain a - * buffered image as returned by getDestination. - * - * Installed read progress listeners, update progress listeners and - * warning listeners will be notified of read progress, changes in - * sample sets and warnings respectively. - * - * Each set of source and destination band settings are checked with - * a call to checkReadParamBandSettings. - * - * @param params iterator over the image read parameters - * - * @return an IIOImage - * - * @exception IllegalStateException if input has not been set - * @exception IllegalArgumentException if a non-ImageReadParam is - * found in params - * @exception IllegalArgumentException if param.getSourceBands() and - * param.getDestinationBands() are incompatible - * @exception IllegalArgumentException if either the source or - * destination image regions are empty - * @exception IOException if a read error occurs - */ - public Iterator<IIOImage> readAll (Iterator<? extends ImageReadParam> params) - throws IOException - { - List l = new ArrayList (); - int index = 0; - - while (params.hasNext()) - { - if (params != null && ! (params instanceof ImageReadParam)) - throw new IllegalArgumentException ("non-ImageReadParam found"); - - l.add (readAll(index++, (ImageReadParam) params.next ())); - } - - return l.iterator(); - } - - /** - * Read a rendered image. This is a more general counterpart to - * read (int, ImageReadParam). All image data may not be read - * before this method returns and so listeners will not necessarily - * be notified. - * - * @param imageIndex the index of the image frame to read - * @param param the image read parameters - * - * @return a rendered image - * - * @exception IllegalStateException if input is null - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IllegalArgumentException if param.getSourceBands() and - * param.getDestinationBands() are incompatible - * @exception IllegalArgumentException if either the source or - * destination image regions are empty - * @exception IOException if a read error occurs - */ - public RenderedImage readAsRenderedImage (int imageIndex, - ImageReadParam param) - throws IOException - { - return read (imageIndex, param); - } - - /** - * Read the given tile into a buffered image. If the tile - * coordinates are out-of-bounds an exception is thrown. If the - * image is not tiled then the coordinates 0, 0 are expected and the - * entire image will be read. - * - * @param imageIndex the frame index - * @param tileX the horizontal tile coordinate - * @param tileY the vertical tile coordinate - * - * @return the contents of the tile as a buffered image - * - * @exception IllegalStateException if input is null - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IllegalArgumentException if the tile coordinates are - * out-of-bounds - * @exception IOException if a read error occurs - */ - public BufferedImage readTile (int imageIndex, int tileX, int tileY) - throws IOException - { - if (tileX != 0 || tileY != 0) - throw new IllegalArgumentException ("tileX not 0 or tileY not 0"); - - return read (imageIndex); - } - - /** - * Read the given tile into a raster containing the raw image data. - * If the tile coordinates are out-of-bounds an exception is thrown. - * If the image is not tiled then the coordinates 0, 0 are expected - * and the entire image will be read. - * - * @param imageIndex the frame index - * @param tileX the horizontal tile coordinate - * @param tileY the vertical tile coordinate - * - * @return the contents of the tile as a raster - * - * @exception UnsupportedOperationException if rasters are not - * supported - * @exception IllegalStateException if input is null - * @exception IndexOutOfBoundsException if the frame index is - * out-of-bounds - * @exception IllegalArgumentException if the tile coordinates are - * out-of-bounds - * @exception IOException if a read error occurs - */ - public Raster readTileRaster (int imageIndex, int tileX, int tileY) - throws IOException - { - if (!canReadRaster()) - throw new UnsupportedOperationException ("cannot read rasters"); - - if (tileX != 0 || tileY != 0) - throw new IllegalArgumentException ("tileX not 0 or tileY not 0"); - - return readRaster (imageIndex, null); - } - - /** - * Reset this reader's internal state. - */ - public void reset () - { - setInput (null, false); - setLocale (null); - removeAllIIOReadUpdateListeners (); - removeAllIIOReadWarningListeners (); - removeAllIIOReadProgressListeners (); - clearAbortRequest (); - } -} |