/* * Copyright (c) 2000, 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.event; import java.awt.image.BufferedImage; import java.util.EventListener; import javax.imageio.ImageReader; /** {@collect.stats} * An interface used by <code>ImageReader</code> implementations to * notify callers of their image and thumbnail reading methods of * pixel updates. * * @see javax.imageio.ImageReader#addIIOReadUpdateListener * @see javax.imageio.ImageReader#removeIIOReadUpdateListener * */ public interface IIOReadUpdateListener extends EventListener { /** {@collect.stats} * Reports that the current read operation is about to begin a * progressive pass. Readers of formats that support progressive * encoding should use this to notify clients when each pass is * completed when reading a progressively encoded image. * * <p> An estimate of the area that will be updated by the pass is * indicated by the <code>minX</code>, <code>minY</code>, * <code>width</code>, and <code>height</code> parameters. If the * pass is interlaced, that is, it only updates selected rows or * columns, the <code>periodX</code> and <code>periodY</code> * parameters will indicate the degree of subsampling. The set of * bands that may be affected is indicated by the value of * <code>bands</code>. * * @param source the <code>ImageReader</code> object calling this * method. * @param theImage the <code>BufferedImage</code> being updated. * @param pass the numer of the pass that is about to begin, * starting with 0. * @param minPass the index of the first pass that will be decoded. * @param maxPass the index of the last pass that will be decoded. * @param minX the X coordinate of the leftmost updated column * of pixels. * @param minY the Y coordinate of the uppermost updated row * of pixels. * @param periodX the horizontal spacing between updated pixels; * a value of 1 means no gaps. * @param periodY the vertical spacing between updated pixels; * a value of 1 means no gaps. * @param bands an array of <code>int</code>s indicating the the * set bands that may be updated. */ void passStarted(ImageReader source, BufferedImage theImage, int pass, int minPass, int maxPass, int minX, int minY, int periodX, int periodY, int[] bands); /** {@collect.stats} * Reports that a given region of the image has been updated. * The application might choose to redisplay the specified area, * for example, in order to provide a progressive display effect, * or perform other incremental processing. * * <p> Note that different image format readers may produce * decoded pixels in a variety of different orders. Many readers * will produce pixels in a simple top-to-bottom, * left-to-right-order, but others may use multiple passes of * interlacing, tiling, etc. The sequence of updates may even * differ from call to call depending on network speeds, for * example. A call to this method does not guarantee that all the * specified pixels have actually been updated, only that some * activity has taken place within some subregion of the one * specified. * * <p> The particular <code>ImageReader</code> implementation may * choose how often to provide updates. Each update specifies * that a given region of the image has been updated since the * last update. A region is described by its spatial bounding box * (<code>minX</code>, <code>minY</code>, <code>width</code>, and * <code>height</code>); X and Y subsampling factors * (<code>periodX</code> and <code>periodY</code>); and a set of * updated bands (<code>bands</code>). For example, the update: * * <pre> * minX = 10 * minY = 20 * width = 3 * height = 4 * periodX = 2 * periodY = 3 * bands = { 1, 3 } * </pre> * * would indicate that bands 1 and 3 of the following pixels were * updated: * * <pre> * (10, 20) (12, 20) (14, 20) * (10, 23) (12, 23) (14, 23) * (10, 26) (12, 26) (14, 26) * (10, 29) (12, 29) (14, 29) * </pre> * * @param source the <code>ImageReader</code> object calling this method. * @param theImage the <code>BufferedImage</code> being updated. * @param minX the X coordinate of the leftmost updated column * of pixels. * @param minY the Y coordinate of the uppermost updated row * of pixels. * @param width the number of updated pixels horizontally. * @param height the number of updated pixels vertically. * @param periodX the horizontal spacing between updated pixels; * a value of 1 means no gaps. * @param periodY the vertical spacing between updated pixels; * a value of 1 means no gaps. * @param bands an array of <code>int</code>s indicating which * bands are being updated. */ void imageUpdate(ImageReader source, BufferedImage theImage, int minX, int minY, int width, int height, int periodX, int periodY, int[] bands); /** {@collect.stats} * Reports that the current read operation has completed a * progressive pass. Readers of formats that support * progressive encoding should use this to notify clients when * each pass is completed when reading a progressively * encoded image. * * @param source the <code>ImageReader</code> object calling this * method. * @param theImage the <code>BufferedImage</code> being updated. * * @see javax.imageio.ImageReadParam#setSourceProgressivePasses(int, int) */ void passComplete(ImageReader source, BufferedImage theImage); /** {@collect.stats} * Reports that the current thumbnail read operation is about to * begin a progressive pass. Readers of formats that support * progressive encoding should use this to notify clients when * each pass is completed when reading a progressively encoded * thumbnail image. * * @param source the <code>ImageReader</code> object calling this * method. * @param theThumbnail the <code>BufferedImage</code> thumbnail * being updated. * @param pass the numer of the pass that is about to begin, * starting with 0. * @param minPass the index of the first pass that will be decoded. * @param maxPass the index of the last pass that will be decoded. * @param minX the X coordinate of the leftmost updated column * of pixels. * @param minY the Y coordinate of the uppermost updated row * of pixels. * @param periodX the horizontal spacing between updated pixels; * a value of 1 means no gaps. * @param periodY the vertical spacing between updated pixels; * a value of 1 means no gaps. * @param bands an array of <code>int</code>s indicating the the * set bands that may be updated. * * @see #passStarted */ void thumbnailPassStarted(ImageReader source, BufferedImage theThumbnail, int pass, int minPass, int maxPass, int minX, int minY, int periodX, int periodY, int[] bands); /** {@collect.stats} * Reports that a given region of a thumbnail image has been updated. * The application might choose to redisplay the specified area, * for example, in order to provide a progressive display effect, * or perform other incremental processing. * * @param source the <code>ImageReader</code> object calling this method. * @param theThumbnail the <code>BufferedImage</code> thumbnail * being updated. * @param minX the X coordinate of the leftmost updated column * of pixels. * @param minY the Y coordinate of the uppermost updated row * of pixels. * @param width the number of updated pixels horizontally. * @param height the number of updated pixels vertically. * @param periodX the horizontal spacing between updated pixels; * a value of 1 means no gaps. * @param periodY the vertical spacing between updated pixels; * a value of 1 means no gaps. * @param bands an array of <code>int</code>s indicating which * bands are being updated. * * @see #imageUpdate */ void thumbnailUpdate(ImageReader source, BufferedImage theThumbnail, int minX, int minY, int width, int height, int periodX, int periodY, int[] bands); /** {@collect.stats} * Reports that the current thumbnail read operation has completed * a progressive pass. Readers of formats that support * progressive encoding should use this to notify clients when * each pass is completed when reading a progressively encoded * thumbnail image. * * @param source the <code>ImageReader</code> object calling this * method. * @param theThumbnail the <code>BufferedImage</code> thumbnail * being updated. * * @see #passComplete */ void thumbnailPassComplete(ImageReader source, BufferedImage theThumbnail); }