1 /* 2 * Copyright (c) 1995, 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 java.awt.image; 27 28 import java.util.Hashtable; 29 30 31 /** 32 * The interface for objects expressing interest in image data through 33 * the ImageProducer interfaces. When a consumer is added to an image 34 * producer, the producer delivers all of the data about the image 35 * using the method calls defined in this interface. 36 * 37 * @see ImageProducer 38 * 39 * @author Jim Graham 40 */ 41 public interface ImageConsumer { 42 /** 43 * The dimensions of the source image are reported using the 44 * setDimensions method call. 45 * @param width the width of the source image 46 * @param height the height of the source image 47 */ 48 void setDimensions(int width, int height); 49 50 /** 51 * Sets the extensible list of properties associated with this image. 52 * @param props the list of properties to be associated with this 53 * image 54 */ 55 void setProperties(Hashtable<?,?> props); 56 57 /** 58 * Sets the ColorModel object used for the majority of 59 * the pixels reported using the setPixels method 60 * calls. Note that each set of pixels delivered using setPixels 61 * contains its own ColorModel object, so no assumption should 62 * be made that this model will be the only one used in delivering 63 * pixel values. A notable case where multiple ColorModel objects 64 * may be seen is a filtered image when for each set of pixels 65 * that it filters, the filter 66 * determines whether the 67 * pixels can be sent on untouched, using the original ColorModel, 68 * or whether the pixels should be modified (filtered) and passed 69 * on using a ColorModel more convenient for the filtering process. 70 * @param model the specified <code>ColorModel</code> 71 * @see ColorModel 72 */ 73 void setColorModel(ColorModel model); 74 75 /** 76 * Sets the hints that the ImageConsumer uses to process the 77 * pixels delivered by the ImageProducer. 78 * The ImageProducer can deliver the pixels in any order, but 79 * the ImageConsumer may be able to scale or convert the pixels 80 * to the destination ColorModel more efficiently or with higher 81 * quality if it knows some information about how the pixels will 82 * be delivered up front. The setHints method should be called 83 * before any calls to any of the setPixels methods with a bit mask 84 * of hints about the manner in which the pixels will be delivered. 85 * If the ImageProducer does not follow the guidelines for the 86 * indicated hint, the results are undefined. 87 * @param hintflags a set of hints that the ImageConsumer uses to 88 * process the pixels 89 */ 90 void setHints(int hintflags); 91 92 /** 93 * The pixels will be delivered in a random order. This tells the 94 * ImageConsumer not to use any optimizations that depend on the 95 * order of pixel delivery, which should be the default assumption 96 * in the absence of any call to the setHints method. 97 * @see #setHints 98 */ 99 int RANDOMPIXELORDER = 1; 100 101 /** 102 * The pixels will be delivered in top-down, left-to-right order. 103 * @see #setHints 104 */ 105 int TOPDOWNLEFTRIGHT = 2; 106 107 /** 108 * The pixels will be delivered in (multiples of) complete scanlines 109 * at a time. 110 * @see #setHints 111 */ 112 int COMPLETESCANLINES = 4; 113 114 /** 115 * The pixels will be delivered in a single pass. Each pixel will 116 * appear in only one call to any of the setPixels methods. An 117 * example of an image format which does not meet this criterion 118 * is a progressive JPEG image which defines pixels in multiple 119 * passes, each more refined than the previous. 120 * @see #setHints 121 */ 122 int SINGLEPASS = 8; 123 124 /** 125 * The image contain a single static image. The pixels will be defined 126 * in calls to the setPixels methods and then the imageComplete method 127 * will be called with the STATICIMAGEDONE flag after which no more 128 * image data will be delivered. An example of an image type which 129 * would not meet these criteria would be the output of a video feed, 130 * or the representation of a 3D rendering being manipulated 131 * by the user. The end of each frame in those types of images will 132 * be indicated by calling imageComplete with the SINGLEFRAMEDONE flag. 133 * @see #setHints 134 * @see #imageComplete 135 */ 136 int SINGLEFRAME = 16; 137 138 /** 139 * Delivers the pixels of the image with one or more calls 140 * to this method. Each call specifies the location and 141 * size of the rectangle of source pixels that are contained in 142 * the array of pixels. The specified ColorModel object should 143 * be used to convert the pixels into their corresponding color 144 * and alpha components. Pixel (m,n) is stored in the pixels array 145 * at index (n * scansize + m + off). The pixels delivered using 146 * this method are all stored as bytes. 147 * @param x the X coordinate of the upper-left corner of the 148 * area of pixels to be set 149 * @param y the Y coordinate of the upper-left corner of the 150 * area of pixels to be set 151 * @param w the width of the area of pixels 152 * @param h the height of the area of pixels 153 * @param model the specified <code>ColorModel</code> 154 * @param pixels the array of pixels 155 * @param off the offset into the <code>pixels</code> array 156 * @param scansize the distance from one row of pixels to the next in 157 * the <code>pixels</code> array 158 * @see ColorModel 159 */ 160 void setPixels(int x, int y, int w, int h, 161 ColorModel model, byte pixels[], int off, int scansize); 162 163 /** 164 * The pixels of the image are delivered using one or more calls 165 * to the setPixels method. Each call specifies the location and 166 * size of the rectangle of source pixels that are contained in 167 * the array of pixels. The specified ColorModel object should 168 * be used to convert the pixels into their corresponding color 169 * and alpha components. Pixel (m,n) is stored in the pixels array 170 * at index (n * scansize + m + off). The pixels delivered using 171 * this method are all stored as ints. 172 * this method are all stored as ints. 173 * @param x the X coordinate of the upper-left corner of the 174 * area of pixels to be set 175 * @param y the Y coordinate of the upper-left corner of the 176 * area of pixels to be set 177 * @param w the width of the area of pixels 178 * @param h the height of the area of pixels 179 * @param model the specified <code>ColorModel</code> 180 * @param pixels the array of pixels 181 * @param off the offset into the <code>pixels</code> array 182 * @param scansize the distance from one row of pixels to the next in 183 * the <code>pixels</code> array 184 * @see ColorModel 185 */ 186 void setPixels(int x, int y, int w, int h, 187 ColorModel model, int pixels[], int off, int scansize); 188 189 /** 190 * The imageComplete method is called when the ImageProducer is 191 * finished delivering all of the pixels that the source image 192 * contains, or when a single frame of a multi-frame animation has 193 * been completed, or when an error in loading or producing the 194 * image has occured. The ImageConsumer should remove itself from the 195 * list of consumers registered with the ImageProducer at this time, 196 * unless it is interested in successive frames. 197 * @param status the status of image loading 198 * @see ImageProducer#removeConsumer 199 */ 200 void imageComplete(int status); 201 202 /** 203 * An error was encountered while producing the image. 204 * @see #imageComplete 205 */ 206 int IMAGEERROR = 1; 207 208 /** 209 * One frame of the image is complete but there are more frames 210 * to be delivered. 211 * @see #imageComplete 212 */ 213 int SINGLEFRAMEDONE = 2; 214 215 /** 216 * The image is complete and there are no more pixels or frames 217 * to be delivered. 218 * @see #imageComplete 219 */ 220 int STATICIMAGEDONE = 3; 221 222 /** 223 * The image creation process was deliberately aborted. 224 * @see #imageComplete 225 */ 226 int IMAGEABORTED = 4; 227 }