jdk/src/share/classes/java/awt/image/renderable/RenderableImageProducer.java
author xdono
Wed, 02 Jul 2008 12:55:45 -0700
changeset 715 f16baef3a20e
parent 539 7952521a4ad3
child 5506 202f599c92aa
permissions -rw-r--r--
6719955: Update copyright year Summary: Update copyright year for files that have been modified in 2008 Reviewed-by: ohair, tbell
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
539
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
     1
/*
715
f16baef3a20e 6719955: Update copyright year
xdono
parents: 539
diff changeset
     2
 * Portions Copyright 1998-2008 Sun Microsystems, Inc.  All Rights Reserved.
539
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
     4
 *
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Sun designates this
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
     9
 * by Sun in the LICENSE file that accompanied this code.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    10
 *
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    15
 * accompanied this code).
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    16
 *
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    20
 *
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    21
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    22
 * CA 95054 USA or visit www.sun.com if you need additional information or
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    23
 * have any questions.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    24
 */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    25
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    26
/* ********************************************************************
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    27
 **********************************************************************
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    28
 **********************************************************************
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    29
 *** COPYRIGHT (c) Eastman Kodak Company, 1997                      ***
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    30
 *** As  an unpublished  work pursuant to Title 17 of the United    ***
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    31
 *** States Code.  All rights reserved.                             ***
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    32
 **********************************************************************
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    33
 **********************************************************************
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    34
 **********************************************************************/
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    35
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    36
package java.awt.image.renderable;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    37
import java.awt.color.ColorSpace;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    38
import java.awt.image.ColorModel;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    39
import java.awt.image.DataBuffer;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    40
import java.awt.image.DirectColorModel;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    41
import java.awt.image.ImageConsumer;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    42
import java.awt.image.ImageProducer;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    43
import java.awt.image.Raster;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    44
import java.awt.image.RenderedImage;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    45
import java.awt.image.SampleModel;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    46
import java.util.Enumeration;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    47
import java.util.Vector;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    48
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    49
/**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    50
 * An adapter class that implements ImageProducer to allow the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    51
 * asynchronous production of a RenderableImage.  The size of the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    52
 * ImageConsumer is determined by the scale factor of the usr2dev
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    53
 * transform in the RenderContext.  If the RenderContext is null, the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    54
 * default rendering of the RenderableImage is used.  This class
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    55
 * implements an asynchronous production that produces the image in
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    56
 * one thread at one resolution.  This class may be subclassed to
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    57
 * implement versions that will render the image using several
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    58
 * threads.  These threads could render either the same image at
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    59
 * progressively better quality, or different sections of the image at
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    60
 * a single resolution.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    61
 */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    62
public class RenderableImageProducer implements ImageProducer, Runnable {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    63
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    64
    /** The RenderableImage source for the producer. */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    65
    RenderableImage rdblImage;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    66
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    67
    /** The RenderContext to use for producing the image. */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    68
    RenderContext rc;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    69
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    70
    /** A Vector of image consumers. */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    71
    Vector ics = new Vector();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    72
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    73
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    74
     * Constructs a new RenderableImageProducer from a RenderableImage
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    75
     * and a RenderContext.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    76
     *
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    77
     * @param rdblImage the RenderableImage to be rendered.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    78
     * @param rc the RenderContext to use for producing the pixels.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    79
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    80
    public RenderableImageProducer(RenderableImage rdblImage,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    81
                                   RenderContext rc) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    82
        this.rdblImage = rdblImage;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    83
        this.rc = rc;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    84
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    85
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    86
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    87
     * Sets a new RenderContext to use for the next startProduction() call.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    88
     *
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    89
     * @param rc the new RenderContext.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    90
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    91
    public synchronized void setRenderContext(RenderContext rc) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    92
        this.rc = rc;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    93
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    94
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    95
   /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    96
     * Adds an ImageConsumer to the list of consumers interested in
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    97
     * data for this image.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    98
     *
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    99
     * @param ic an ImageConsumer to be added to the interest list.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   100
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   101
    public synchronized void addConsumer(ImageConsumer ic) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   102
        if (!ics.contains(ic)) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   103
            ics.addElement(ic);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   104
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   105
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   106
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   107
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   108
     * Determine if an ImageConsumer is on the list of consumers
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   109
     * currently interested in data for this image.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   110
     *
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   111
     * @param ic the ImageConsumer to be checked.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   112
     * @return true if the ImageConsumer is on the list; false otherwise.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   113
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   114
    public synchronized boolean isConsumer(ImageConsumer ic) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   115
        return ics.contains(ic);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   116
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   117
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   118
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   119
     * Remove an ImageConsumer from the list of consumers interested in
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   120
     * data for this image.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   121
     *
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   122
     * @param ic the ImageConsumer to be removed.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   123
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   124
    public synchronized void removeConsumer(ImageConsumer ic) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   125
        ics.removeElement(ic);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   126
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   127
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   128
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   129
     * Adds an ImageConsumer to the list of consumers interested in
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   130
     * data for this image, and immediately starts delivery of the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   131
     * image data through the ImageConsumer interface.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   132
     *
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   133
     * @param ic the ImageConsumer to be added to the list of consumers.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   134
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   135
    public synchronized void startProduction(ImageConsumer ic) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   136
        addConsumer(ic);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   137
        // Need to build a runnable object for the Thread.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   138
        Thread thread = new Thread(this, "RenderableImageProducer Thread");
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   139
        thread.start();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   140
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   141
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   142
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   143
     * Requests that a given ImageConsumer have the image data delivered
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   144
     * one more time in top-down, left-right order.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   145
     *
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   146
     * @param ic the ImageConsumer requesting the resend.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   147
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   148
    public void requestTopDownLeftRightResend(ImageConsumer ic) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   149
        // So far, all pixels are already sent in TDLR order
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   150
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   151
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   152
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   153
     * The runnable method for this class. This will produce an image using
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   154
     * the current RenderableImage and RenderContext and send it to all the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   155
     * ImageConsumer currently registered with this class.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   156
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   157
    public void run() {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   158
        // First get the rendered image
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   159
        RenderedImage rdrdImage;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   160
        if (rc != null) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   161
            rdrdImage = rdblImage.createRendering(rc);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   162
        } else {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   163
            rdrdImage = rdblImage.createDefaultRendering();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   164
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   165
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   166
        // And its ColorModel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   167
        ColorModel colorModel = rdrdImage.getColorModel();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   168
        Raster raster = rdrdImage.getData();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   169
        SampleModel sampleModel = raster.getSampleModel();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   170
        DataBuffer dataBuffer = raster.getDataBuffer();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   171
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   172
        if (colorModel == null) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   173
            colorModel = ColorModel.getRGBdefault();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   174
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   175
        int minX = raster.getMinX();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   176
        int minY = raster.getMinY();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   177
        int width = raster.getWidth();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   178
        int height = raster.getHeight();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   179
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   180
        Enumeration icList;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   181
        ImageConsumer ic;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   182
        // Set up the ImageConsumers
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   183
        icList = ics.elements();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   184
        while (icList.hasMoreElements()) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   185
            ic = (ImageConsumer)icList.nextElement();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   186
            ic.setDimensions(width,height);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   187
            ic.setHints(ImageConsumer.TOPDOWNLEFTRIGHT |
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   188
                        ImageConsumer.COMPLETESCANLINES |
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   189
                        ImageConsumer.SINGLEPASS |
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   190
                        ImageConsumer.SINGLEFRAME);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   191
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   192
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   193
        // Get RGB pixels from the raster scanline by scanline and
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   194
        // send to consumers.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   195
        int pix[] = new int[width];
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   196
        int i,j;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   197
        int numBands = sampleModel.getNumBands();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   198
        int tmpPixel[] = new int[numBands];
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   199
        for (j = 0; j < height; j++) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   200
            for(i = 0; i < width; i++) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   201
                sampleModel.getPixel(i, j, tmpPixel, dataBuffer);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   202
                pix[i] = colorModel.getDataElement(tmpPixel, 0);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   203
            }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   204
            // Now send the scanline to the Consumers
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   205
            icList = ics.elements();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   206
            while (icList.hasMoreElements()) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   207
                ic = (ImageConsumer)icList.nextElement();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   208
                ic.setPixels(0, j, width, 1, colorModel, pix, 0, width);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   209
            }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   210
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   211
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   212
        // Now tell the consumers we're done.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   213
        icList = ics.elements();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   214
        while (icList.hasMoreElements()) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   215
            ic = (ImageConsumer)icList.nextElement();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   216
            ic.imageComplete(ImageConsumer.STATICIMAGEDONE);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   217
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   218
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   219
}