1 /*
2  * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 package javax.imageio.event;
27 
28 import java.awt.image.BufferedImage;
29 import java.util.EventListener;
30 import javax.imageio.ImageReader;
31 
32 /**
33  * An interface used by {@code ImageReader} implementations to
34  * notify callers of their image and thumbnail reading methods of
35  * pixel updates.
36  *
37  * @see javax.imageio.ImageReader#addIIOReadUpdateListener
38  * @see javax.imageio.ImageReader#removeIIOReadUpdateListener
39  *
40  */
41 public interface IIOReadUpdateListener extends EventListener {
42 
43     /**
44      * Reports that the current read operation is about to begin a
45      * progressive pass.  Readers of formats that support progressive
46      * encoding should use this to notify clients when each pass is
47      * completed when reading a progressively encoded image.
48      *
49      * <p> An estimate of the area that will be updated by the pass is
50      * indicated by the {@code minX}, {@code minY},
51      * {@code width}, and {@code height} parameters.  If the
52      * pass is interlaced, that is, it only updates selected rows or
53      * columns, the {@code periodX} and {@code periodY}
54      * parameters will indicate the degree of subsampling.  The set of
55      * bands that may be affected is indicated by the value of
56      * {@code bands}.
57      *
58      * @param source the {@code ImageReader} object calling this
59      * method.
60      * @param theImage the {@code BufferedImage} being updated.
61      * @param pass the number of the pass that is about to begin,
62      * starting with 0.
63      * @param minPass the index of the first pass that will be decoded.
64      * @param maxPass the index of the last pass that will be decoded.
65      * @param minX the X coordinate of the leftmost updated column
66      * of pixels.
67      * @param minY the Y coordinate of the uppermost updated row
68      * of pixels.
69      * @param periodX the horizontal spacing between updated pixels;
70      * a value of 1 means no gaps.
71      * @param periodY the vertical spacing between updated pixels;
72      * a value of 1 means no gaps.
73      * @param bands an array of {@code int}s indicating the
74      * set bands that may be updated.
75      */
passStarted(ImageReader source, BufferedImage theImage, int pass, int minPass, int maxPass, int minX, int minY, int periodX, int periodY, int[] bands)76     void passStarted(ImageReader source,
77                      BufferedImage theImage,
78                      int pass,
79                      int minPass, int maxPass,
80                      int minX, int minY,
81                      int periodX, int periodY,
82                      int[] bands);
83 
84     /**
85      * Reports that a given region of the image has been updated.
86      * The application might choose to redisplay the specified area,
87      * for example, in order to provide a progressive display effect,
88      * or perform other incremental processing.
89      *
90      * <p> Note that different image format readers may produce
91      * decoded pixels in a variety of different orders.  Many readers
92      * will produce pixels in a simple top-to-bottom,
93      * left-to-right-order, but others may use multiple passes of
94      * interlacing, tiling, etc.  The sequence of updates may even
95      * differ from call to call depending on network speeds, for
96      * example.  A call to this method does not guarantee that all the
97      * specified pixels have actually been updated, only that some
98      * activity has taken place within some subregion of the one
99      * specified.
100      *
101      * <p> The particular {@code ImageReader} implementation may
102      * choose how often to provide updates.  Each update specifies
103      * that a given region of the image has been updated since the
104      * last update.  A region is described by its spatial bounding box
105      * ({@code minX}, {@code minY}, {@code width}, and
106      * {@code height}); X and Y subsampling factors
107      * ({@code periodX} and {@code periodY}); and a set of
108      * updated bands ({@code bands}).  For example, the update:
109      *
110      * <pre>
111      * minX = 10
112      * minY = 20
113      * width = 3
114      * height = 4
115      * periodX = 2
116      * periodY = 3
117      * bands = { 1, 3 }
118      * </pre>
119      *
120      * would indicate that bands 1 and 3 of the following pixels were
121      * updated:
122      *
123      * <pre>
124      * (10, 20) (12, 20) (14, 20)
125      * (10, 23) (12, 23) (14, 23)
126      * (10, 26) (12, 26) (14, 26)
127      * (10, 29) (12, 29) (14, 29)
128      * </pre>
129      *
130      * @param source the {@code ImageReader} object calling this method.
131      * @param theImage the {@code BufferedImage} being updated.
132      * @param minX the X coordinate of the leftmost updated column
133      * of pixels.
134      * @param minY the Y coordinate of the uppermost updated row
135      * of pixels.
136      * @param width the number of updated pixels horizontally.
137      * @param height the number of updated pixels vertically.
138      * @param periodX the horizontal spacing between updated pixels;
139      * a value of 1 means no gaps.
140      * @param periodY the vertical spacing between updated pixels;
141      * a value of 1 means no gaps.
142      * @param bands an array of {@code int}s indicating which
143      * bands are being updated.
144      */
imageUpdate(ImageReader source, BufferedImage theImage, int minX, int minY, int width, int height, int periodX, int periodY, int[] bands)145     void imageUpdate(ImageReader source,
146                      BufferedImage theImage,
147                      int minX, int minY,
148                      int width, int height,
149                      int periodX, int periodY,
150                      int[] bands);
151 
152     /**
153      * Reports that the current read operation has completed a
154      * progressive pass.  Readers of formats that support
155      * progressive encoding should use this to notify clients when
156      * each pass is completed when reading a progressively
157      * encoded image.
158      *
159      * @param source the {@code ImageReader} object calling this
160      * method.
161      * @param theImage the {@code BufferedImage} being updated.
162      *
163      * @see javax.imageio.ImageReadParam#setSourceProgressivePasses(int, int)
164      */
passComplete(ImageReader source, BufferedImage theImage)165     void passComplete(ImageReader source, BufferedImage theImage);
166 
167     /**
168      * Reports that the current thumbnail read operation is about to
169      * begin a progressive pass.  Readers of formats that support
170      * progressive encoding should use this to notify clients when
171      * each pass is completed when reading a progressively encoded
172      * thumbnail image.
173      *
174      * @param source the {@code ImageReader} object calling this
175      * method.
176      * @param theThumbnail the {@code BufferedImage} thumbnail
177      * being updated.
178      * @param pass the number of the pass that is about to begin,
179      * starting with 0.
180      * @param minPass the index of the first pass that will be decoded.
181      * @param maxPass the index of the last pass that will be decoded.
182      * @param minX the X coordinate of the leftmost updated column
183      * of pixels.
184      * @param minY the Y coordinate of the uppermost updated row
185      * of pixels.
186      * @param periodX the horizontal spacing between updated pixels;
187      * a value of 1 means no gaps.
188      * @param periodY the vertical spacing between updated pixels;
189      * a value of 1 means no gaps.
190      * @param bands an array of {@code int}s indicating the
191      * set bands that may be updated.
192      *
193      * @see #passStarted
194      */
thumbnailPassStarted(ImageReader source, BufferedImage theThumbnail, int pass, int minPass, int maxPass, int minX, int minY, int periodX, int periodY, int[] bands)195     void thumbnailPassStarted(ImageReader source,
196                               BufferedImage theThumbnail,
197                               int pass,
198                               int minPass, int maxPass,
199                               int minX, int minY,
200                               int periodX, int periodY,
201                               int[] bands);
202 
203     /**
204      * Reports that a given region of a thumbnail image has been updated.
205      * The application might choose to redisplay the specified area,
206      * for example, in order to provide a progressive display effect,
207      * or perform other incremental processing.
208      *
209      * @param source the {@code ImageReader} object calling this method.
210      * @param theThumbnail the {@code BufferedImage} thumbnail
211      * being updated.
212      * @param minX the X coordinate of the leftmost updated column
213      * of pixels.
214      * @param minY the Y coordinate of the uppermost updated row
215      * of pixels.
216      * @param width the number of updated pixels horizontally.
217      * @param height the number of updated pixels vertically.
218      * @param periodX the horizontal spacing between updated pixels;
219      * a value of 1 means no gaps.
220      * @param periodY the vertical spacing between updated pixels;
221      * a value of 1 means no gaps.
222      * @param bands an array of {@code int}s indicating which
223      * bands are being updated.
224      *
225      * @see #imageUpdate
226      */
thumbnailUpdate(ImageReader source, BufferedImage theThumbnail, int minX, int minY, int width, int height, int periodX, int periodY, int[] bands)227     void thumbnailUpdate(ImageReader source,
228                          BufferedImage theThumbnail,
229                          int minX, int minY,
230                          int width, int height,
231                          int periodX, int periodY,
232                          int[] bands);
233 
234     /**
235      * Reports that the current thumbnail read operation has completed
236      * a progressive pass.  Readers of formats that support
237      * progressive encoding should use this to notify clients when
238      * each pass is completed when reading a progressively encoded
239      * thumbnail image.
240      *
241      * @param source the {@code ImageReader} object calling this
242      * method.
243      * @param theThumbnail the {@code BufferedImage} thumbnail
244      * being updated.
245      *
246      * @see #passComplete
247      */
thumbnailPassComplete(ImageReader source, BufferedImage theThumbnail)248     void thumbnailPassComplete(ImageReader source, BufferedImage theThumbnail);
249 }
250