322 lines · 10.2 KB · Java
RawDownload
/* * Copyright (c) 2000, 2004, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.  Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code 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 * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package javax.imageio; import java.awt.image.BufferedImage;import java.awt.image.Raster;import java.awt.image.RenderedImage;import java.util.List;import javax.imageio.metadata.IIOMetadata; /** * A simple container class to aggregate an image, a set of * thumbnail (preview) images, and an object representing metadata * associated with the image. * * <p> The image data may take the form of either a * <code>RenderedImage</code>, or a <code>Raster</code>.  Reader * methods that return an <code>IIOImage</code> will always return a * <code>BufferedImage</code> using the <code>RenderedImage</code> * reference.  Writer methods that accept an <code>IIOImage</code> * will always accept a <code>RenderedImage</code>, and may optionally * accept a <code>Raster</code>. * * <p> Exactly one of <code>getRenderedImage</code> and * <code>getRaster</code> will return a non-<code>null</code> value. * Subclasses are responsible for ensuring this behavior. * * @see ImageReader#readAll(int, ImageReadParam) * @see ImageReader#readAll(java.util.Iterator) * @see ImageWriter#write(javax.imageio.metadata.IIOMetadata, *                        IIOImage, ImageWriteParam) * @see ImageWriter#write(IIOImage) * @see ImageWriter#writeToSequence(IIOImage, ImageWriteParam) * @see ImageWriter#writeInsert(int, IIOImage, ImageWriteParam) * */public class IIOImage {     /**     * The <code>RenderedImage</code> being referenced.     */    protected RenderedImage image;     /**     * The <code>Raster</code> being referenced.     */    protected Raster raster;     /**     * A <code>List</code> of <code>BufferedImage</code> thumbnails,     * or <code>null</code>.  Non-<code>BufferedImage</code> objects     * must not be stored in this <code>List</code>.     */    protected List<? extends BufferedImage> thumbnails = null;     /**     * An <code>IIOMetadata</code> object containing metadata     * associated with the image.     */    protected IIOMetadata metadata;     /**     * Constructs an <code>IIOImage</code> containing a     * <code>RenderedImage</code>, and thumbnails and metadata     * associated with it.     *     * <p> All parameters are stored by reference.     *     * <p> The <code>thumbnails</code> argument must either be     * <code>null</code> or contain only <code>BufferedImage</code>     * objects.     *     * @param image a <code>RenderedImage</code>.     * @param thumbnails a <code>List</code> of <code>BufferedImage</code>s,     * or <code>null</code>.     * @param metadata an <code>IIOMetadata</code> object, or     * <code>null</code>.     *     * @exception IllegalArgumentException if <code>image</code> is     * <code>null</code>.     */    public IIOImage(RenderedImage image,                    List<? extends BufferedImage> thumbnails,                    IIOMetadata metadata) {        if (image == null) {            throw new IllegalArgumentException("image == null!");        }        this.image = image;        this.raster = null;        this.thumbnails = thumbnails;        this.metadata = metadata;    }     /**     * Constructs an <code>IIOImage</code> containing a     * <code>Raster</code>, and thumbnails and metadata     * associated with it.     *     * <p> All parameters are stored by reference.     *     * @param raster a <code>Raster</code>.     * @param thumbnails a <code>List</code> of <code>BufferedImage</code>s,     * or <code>null</code>.     * @param metadata an <code>IIOMetadata</code> object, or     * <code>null</code>.     *     * @exception IllegalArgumentException if <code>raster</code> is     * <code>null</code>.     */    public IIOImage(Raster raster,                    List<? extends BufferedImage> thumbnails,                    IIOMetadata metadata) {        if (raster == null) {            throw new IllegalArgumentException("raster == null!");        }        this.raster = raster;        this.image = null;        this.thumbnails = thumbnails;        this.metadata = metadata;    }     /**     * Returns the currently set <code>RenderedImage</code>, or     * <code>null</code> if only a <code>Raster</code> is available.     *     * @return a <code>RenderedImage</code>, or <code>null</code>.     *     * @see #setRenderedImage     */    public RenderedImage getRenderedImage() {        synchronized(this) {            return image;        }    }     /**     * Sets the current <code>RenderedImage</code>.  The value is     * stored by reference.  Any existing <code>Raster</code> is     * discarded.     *     * @param image a <code>RenderedImage</code>.     *     * @exception IllegalArgumentException if <code>image</code> is     * <code>null</code>.     *     * @see #getRenderedImage     */    public void setRenderedImage(RenderedImage image) {        synchronized(this) {            if (image == null) {                throw new IllegalArgumentException("image == null!");            }            this.image = image;            this.raster = null;        }    }     /**     * Returns <code>true</code> if this <code>IIOImage</code> stores     * a <code>Raster</code> rather than a <code>RenderedImage</code>.     *     * @return <code>true</code> if a <code>Raster</code> is     * available.     */    public boolean hasRaster() {        synchronized(this) {            return (raster != null);        }    }     /**     * Returns the currently set <code>Raster</code>, or     * <code>null</code> if only a <code>RenderedImage</code> is     * available.     *     * @return a <code>Raster</code>, or <code>null</code>.     *     * @see #setRaster     */    public Raster getRaster() {        synchronized(this) {            return raster;        }    }     /**     * Sets the current <code>Raster</code>.  The value is     * stored by reference.  Any existing <code>RenderedImage</code> is     * discarded.     *     * @param raster a <code>Raster</code>.     *     * @exception IllegalArgumentException if <code>raster</code> is     * <code>null</code>.     *     * @see #getRaster     */    public void setRaster(Raster raster) {        synchronized(this) {            if (raster == null) {                throw new IllegalArgumentException("raster == null!");            }            this.raster = raster;            this.image = null;        }    }     /**     * Returns the number of thumbnails stored in this     * <code>IIOImage</code>.     *     * @return the number of thumbnails, as an <code>int</code>.     */    public int getNumThumbnails() {        return thumbnails == null ? 0 : thumbnails.size();    }     /**     * Returns a thumbnail associated with the main image.     *     * @param index the index of the desired thumbnail image.     *     * @return a thumbnail image, as a <code>BufferedImage</code>.     *     * @exception IndexOutOfBoundsException if the supplied index is     * negative or larger than the largest valid index.     * @exception ClassCastException if a     * non-<code>BufferedImage</code> object is encountered in the     * list of thumbnails at the given index.     *     * @see #getThumbnails     * @see #setThumbnails     */    public BufferedImage getThumbnail(int index) {        if (thumbnails == null) {            throw new IndexOutOfBoundsException("No thumbnails available!");        }        return (BufferedImage)thumbnails.get(index);    }     /**     * Returns the current <code>List</code> of thumbnail     * <code>BufferedImage</code>s, or <code>null</code> if none is     * set.  A live reference is returned.     *     * @return the current <code>List</code> of     * <code>BufferedImage</code> thumbnails, or <code>null</code>.     *     * @see #getThumbnail(int)     * @see #setThumbnails     */    public List<? extends BufferedImage> getThumbnails() {        return thumbnails;    }     /**     * Sets the list of thumbnails to a new <code>List</code> of     * <code>BufferedImage</code>s, or to <code>null</code>.  The     * reference to the previous <code>List</code> is discarded.     *     * <p> The <code>thumbnails</code> argument must either be     * <code>null</code> or contain only <code>BufferedImage</code>     * objects.     *     * @param thumbnails a <code>List</code> of     * <code>BufferedImage</code> thumbnails, or <code>null</code>.     *     * @see #getThumbnail(int)     * @see #getThumbnails     */    public void setThumbnails(List<? extends BufferedImage> thumbnails) {        this.thumbnails = thumbnails;    }     /**     * Returns a reference to the current <code>IIOMetadata</code>     * object, or <code>null</code> is none is set.     *     * @return an <code>IIOMetadata</code> object, or <code>null</code>.     *     * @see #setMetadata     */    public IIOMetadata getMetadata() {        return metadata;    }     /**     * Sets the <code>IIOMetadata</code> to a new object, or     * <code>null</code>.     *     * @param metadata an <code>IIOMetadata</code> object, or     * <code>null</code>.     *     * @see #getMetadata     */    public void setMetadata(IIOMetadata metadata) {        this.metadata = metadata;    }}