jdk/src/share/classes/java/awt/image/MultiPixelPackedSampleModel.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 1997-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;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    37
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    38
/**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    39
 * The <code>MultiPixelPackedSampleModel</code> class represents
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    40
 * one-banded images and can pack multiple one-sample
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    41
 * pixels into one data element.  Pixels are not allowed to span data elements.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    42
 * The data type can be DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    43
 * or DataBuffer.TYPE_INT.  Each pixel must be a power of 2 number of bits
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    44
 * and a power of 2 number of pixels must fit exactly in one data element.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    45
 * Pixel bit stride is equal to the number of bits per pixel.  Scanline
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    46
 * stride is in data elements and the last several data elements might be
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    47
 * padded with unused pixels.  Data bit offset is the offset in bits from
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    48
 * the beginning of the {@link DataBuffer} to the first pixel and must be
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    49
 * a multiple of pixel bit stride.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    50
 * <p>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    51
 * The following code illustrates extracting the bits for pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    52
 * <code>x,&nbsp;y</code> from <code>DataBuffer</code> <code>data</code>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    53
 * and storing the pixel data in data elements of type
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    54
 * <code>dataType</code>:
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    55
 * <pre>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    56
 *      int dataElementSize = DataBuffer.getDataTypeSize(dataType);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    57
 *      int bitnum = dataBitOffset + x*pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    58
 *      int element = data.getElem(y*scanlineStride + bitnum/dataElementSize);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    59
 *      int shift = dataElementSize - (bitnum & (dataElementSize-1))
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    60
 *                  - pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    61
 *      int pixel = (element >> shift) & ((1 << pixelBitStride) - 1);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    62
 * </pre>
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
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    65
public class MultiPixelPackedSampleModel extends SampleModel
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 number of bits from one pixel to the next. */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    68
    int pixelBitStride;
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
    /** Bitmask that extracts the rightmost pixel of a data element. */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    71
    int bitMask;
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
      * The number of pixels that fit in a data element.  Also used
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    75
      * as the number of bits per pixel.
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
    int pixelsPerDataElement;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    78
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    79
    /** The size of a data element in bits. */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    80
    int dataElementSize;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    81
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    82
    /** The bit offset into the data array where the first pixel begins.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    83
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    84
    int dataBitOffset;
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
    /** ScanlineStride of the data buffer described in data array elements. */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    87
    int scanlineStride;
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
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    90
     * Constructs a <code>MultiPixelPackedSampleModel</code> with the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    91
     * specified data type, width, height and number of bits per pixel.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    92
     * @param dataType  the data type for storing samples
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    93
     * @param w         the width, in pixels, of the region of
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    94
     *                  image data described
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    95
     * @param h         the height, in pixels, of the region of
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    96
     *                  image data described
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    97
     * @param numberOfBits the number of bits per pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    98
     * @throws IllegalArgumentException if <code>dataType</code> is not
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
    99
     *         either <code>DataBuffer.TYPE_BYTE</code>,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   100
     *         <code>DataBuffer.TYPE_USHORT</code>, or
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   101
     *         <code>DataBuffer.TYPE_INT</code>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   102
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   103
    public MultiPixelPackedSampleModel(int dataType,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   104
                                       int w,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   105
                                       int h,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   106
                                       int numberOfBits) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   107
        this(dataType,w,h,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   108
             numberOfBits,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   109
            (w*numberOfBits+DataBuffer.getDataTypeSize(dataType)-1)/
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   110
                DataBuffer.getDataTypeSize(dataType),
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   111
             0);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   112
        if (dataType != DataBuffer.TYPE_BYTE &&
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   113
            dataType != DataBuffer.TYPE_USHORT &&
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   114
            dataType != DataBuffer.TYPE_INT) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   115
            throw new IllegalArgumentException("Unsupported data type "+
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   116
                                               dataType);
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
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   120
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   121
     * Constructs a <code>MultiPixelPackedSampleModel</code> with
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   122
     * specified data type, width, height, number of bits per pixel,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   123
     * scanline stride and data bit offset.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   124
     * @param dataType  the data type for storing samples
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   125
     * @param w         the width, in pixels, of the region of
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   126
     *                  image data described
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   127
     * @param h         the height, in pixels, of the region of
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   128
     *                  image data described
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   129
     * @param numberOfBits the number of bits per pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   130
     * @param scanlineStride the line stride of the image data
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   131
     * @param dataBitOffset the data bit offset for the region of image
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   132
     *                  data described
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   133
     * @exception RasterFormatException if the number of bits per pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   134
     *                  is not a power of 2 or if a power of 2 number of
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   135
     *                  pixels do not fit in one data element.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   136
     * @throws IllegalArgumentException if <code>w</code> or
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   137
     *         <code>h</code> is not greater than 0
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   138
     * @throws IllegalArgumentException if <code>dataType</code> is not
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   139
     *         either <code>DataBuffer.TYPE_BYTE</code>,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   140
     *         <code>DataBuffer.TYPE_USHORT</code>, or
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   141
     *         <code>DataBuffer.TYPE_INT</code>
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
    public MultiPixelPackedSampleModel(int dataType, int w, int h,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   144
                                       int numberOfBits,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   145
                                       int scanlineStride,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   146
                                       int dataBitOffset) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   147
        super(dataType, w, h, 1);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   148
        if (dataType != DataBuffer.TYPE_BYTE &&
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   149
            dataType != DataBuffer.TYPE_USHORT &&
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   150
            dataType != DataBuffer.TYPE_INT) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   151
            throw new IllegalArgumentException("Unsupported data type "+
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   152
                                               dataType);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   153
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   154
        this.dataType = dataType;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   155
        this.pixelBitStride = numberOfBits;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   156
        this.scanlineStride = scanlineStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   157
        this.dataBitOffset = dataBitOffset;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   158
        this.dataElementSize = DataBuffer.getDataTypeSize(dataType);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   159
        this.pixelsPerDataElement = dataElementSize/numberOfBits;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   160
        if (pixelsPerDataElement*numberOfBits != dataElementSize) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   161
           throw new RasterFormatException("MultiPixelPackedSampleModel " +
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   162
                                             "does not allow pixels to " +
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   163
                                             "span data element boundaries");
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
        this.bitMask = (1 << numberOfBits) - 1;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   166
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   167
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   168
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   169
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   170
     * Creates a new <code>MultiPixelPackedSampleModel</code> with the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   171
     * specified width and height.  The new
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   172
     * <code>MultiPixelPackedSampleModel</code> has the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   173
     * same storage data type and number of bits per pixel as this
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   174
     * <code>MultiPixelPackedSampleModel</code>.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   175
     * @param w the specified width
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   176
     * @param h the specified height
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   177
     * @return a {@link SampleModel} with the specified width and height
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   178
     * and with the same storage data type and number of bits per pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   179
     * as this <code>MultiPixelPackedSampleModel</code>.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   180
     * @throws IllegalArgumentException if <code>w</code> or
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   181
     *         <code>h</code> is not greater than 0
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   182
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   183
    public SampleModel createCompatibleSampleModel(int w, int h) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   184
      SampleModel sampleModel =
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   185
            new MultiPixelPackedSampleModel(dataType, w, h, pixelBitStride);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   186
      return sampleModel;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   187
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   188
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   189
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   190
     * Creates a <code>DataBuffer</code> that corresponds to this
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   191
     * <code>MultiPixelPackedSampleModel</code>.  The
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   192
     * <code>DataBuffer</code> object's data type and size
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   193
     * is consistent with this <code>MultiPixelPackedSampleModel</code>.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   194
     * The <code>DataBuffer</code> has a single bank.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   195
     * @return a <code>DataBuffer</code> with the same data type and
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   196
     * size as this <code>MultiPixelPackedSampleModel</code>.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   197
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   198
    public DataBuffer createDataBuffer() {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   199
        DataBuffer dataBuffer = null;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   200
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   201
        int size = (int)scanlineStride*height;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   202
        switch (dataType) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   203
        case DataBuffer.TYPE_BYTE:
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   204
            dataBuffer = new DataBufferByte(size+(dataBitOffset+7)/8);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   205
            break;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   206
        case DataBuffer.TYPE_USHORT:
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   207
            dataBuffer = new DataBufferUShort(size+(dataBitOffset+15)/16);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   208
            break;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   209
        case DataBuffer.TYPE_INT:
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   210
            dataBuffer = new DataBufferInt(size+(dataBitOffset+31)/32);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   211
            break;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   212
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   213
        return dataBuffer;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   214
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   215
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   216
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   217
     * Returns the number of data elements needed to transfer one pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   218
     * via the {@link #getDataElements} and {@link #setDataElements}
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   219
     * methods.  For a <code>MultiPixelPackedSampleModel</code>, this is
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   220
     * one.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   221
     * @return the number of data elements.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   222
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   223
    public int getNumDataElements() {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   224
        return 1;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   225
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   226
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   227
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   228
     * Returns the number of bits per sample for all bands.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   229
     * @return the number of bits per sample.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   230
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   231
    public int[] getSampleSize() {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   232
        int sampleSize[] = {pixelBitStride};
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   233
        return sampleSize;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   234
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   235
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   236
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   237
     * Returns the number of bits per sample for the specified band.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   238
     * @param band the specified band
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   239
     * @return the number of bits per sample for the specified band.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   240
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   241
    public int getSampleSize(int band) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   242
        return pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   243
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   244
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   245
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   246
     * Returns the offset of pixel (x,&nbsp;y) in data array elements.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   247
     * @param x the X coordinate of the specified pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   248
     * @param y the Y coordinate of the specified pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   249
     * @return the offset of the specified pixel.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   250
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   251
    public int getOffset(int x, int y) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   252
        int offset = y * scanlineStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   253
        offset +=  (x*pixelBitStride+dataBitOffset)/dataElementSize;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   254
        return offset;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   255
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   256
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   257
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   258
     *  Returns the offset, in bits, into the data element in which it is
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   259
     *  stored for the <code>x</code>th pixel of a scanline.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   260
     *  This offset is the same for all scanlines.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   261
     *  @param x the specified pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   262
     *  @return the bit offset of the specified pixel.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   263
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   264
    public int getBitOffset(int x){
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   265
       return  (x*pixelBitStride+dataBitOffset)%dataElementSize;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   266
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   267
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   268
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   269
     * Returns the scanline stride.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   270
     * @return the scanline stride of this
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   271
     * <code>MultiPixelPackedSampleModel</code>.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   272
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   273
    public int getScanlineStride() {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   274
        return scanlineStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   275
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   276
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   277
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   278
     * Returns the pixel bit stride in bits.  This value is the same as
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   279
     * the number of bits per pixel.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   280
     * @return the <code>pixelBitStride</code> of this
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   281
     * <code>MultiPixelPackedSampleModel</code>.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   282
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   283
    public int getPixelBitStride() {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   284
        return pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   285
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   286
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   287
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   288
     * Returns the data bit offset in bits.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   289
     * @return the <code>dataBitOffset</code> of this
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   290
     * <code>MultiPixelPackedSampleModel</code>.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   291
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   292
    public int getDataBitOffset() {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   293
        return dataBitOffset;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   294
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   295
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   296
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   297
     *  Returns the TransferType used to transfer pixels by way of the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   298
     *  <code>getDataElements</code> and <code>setDataElements</code>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   299
     *  methods. The TransferType might or might not be the same as the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   300
     *  storage DataType.  The TransferType is one of
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   301
     *  DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   302
     *  or DataBuffer.TYPE_INT.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   303
     *  @return the transfertype.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   304
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   305
    public int getTransferType() {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   306
        if (pixelBitStride > 16)
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   307
            return DataBuffer.TYPE_INT;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   308
        else if (pixelBitStride > 8)
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   309
            return DataBuffer.TYPE_USHORT;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   310
        else
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   311
            return DataBuffer.TYPE_BYTE;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   312
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   313
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   314
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   315
     * Creates a new <code>MultiPixelPackedSampleModel</code> with a
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   316
     * subset of the bands of this
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   317
     * <code>MultiPixelPackedSampleModel</code>.  Since a
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   318
     * <code>MultiPixelPackedSampleModel</code> only has one band, the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   319
     * bands argument must have a length of one and indicate the zeroth
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   320
     * band.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   321
     * @param bands the specified bands
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   322
     * @return a new <code>SampleModel</code> with a subset of bands of
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   323
     * this <code>MultiPixelPackedSampleModel</code>.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   324
     * @exception RasterFormatException if the number of bands requested
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   325
     * is not one.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   326
     * @throws IllegalArgumentException if <code>w</code> or
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   327
     *         <code>h</code> is not greater than 0
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   328
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   329
    public SampleModel createSubsetSampleModel(int bands[]) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   330
        if (bands != null) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   331
           if (bands.length != 1)
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   332
            throw new RasterFormatException("MultiPixelPackedSampleModel has "
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   333
                                            + "only one band.");
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   334
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   335
        SampleModel sm = createCompatibleSampleModel(width, height);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   336
        return sm;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   337
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   338
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   339
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   340
     * Returns as <code>int</code> the sample in a specified band for the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   341
     * pixel located at (x,&nbsp;y).  An
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   342
     * <code>ArrayIndexOutOfBoundsException</code> is thrown if the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   343
     * coordinates are not in bounds.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   344
     * @param x         the X coordinate of the specified pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   345
     * @param y         the Y coordinate of the specified pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   346
     * @param b         the band to return, which is assumed to be 0
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   347
     * @param data      the <code>DataBuffer</code> containing the image
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   348
     *                  data
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   349
     * @return the specified band containing the sample of the specified
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   350
     * pixel.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   351
     * @exception ArrayIndexOutOfBoundException if the specified
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   352
     *          coordinates are not in bounds.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   353
     * @see #setSample(int, int, int, int, DataBuffer)
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   354
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   355
    public int getSample(int x, int y, int b, DataBuffer data) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   356
        // 'b' must be 0
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   357
        if ((x < 0) || (y < 0) || (x >= width) || (y >= height) ||
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   358
            (b != 0)) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   359
            throw new ArrayIndexOutOfBoundsException
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   360
                ("Coordinate out of bounds!");
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   361
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   362
        int bitnum = dataBitOffset + x*pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   363
        int element = data.getElem(y*scanlineStride + bitnum/dataElementSize);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   364
        int shift = dataElementSize - (bitnum & (dataElementSize-1))
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   365
                    - pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   366
        return (element >> shift) & bitMask;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   367
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   368
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   369
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   370
     * Sets a sample in the specified band for the pixel located at
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   371
     * (x,&nbsp;y) in the <code>DataBuffer</code> using an
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   372
     * <code>int</code> for input.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   373
     * An <code>ArrayIndexOutOfBoundsException</code> is thrown if the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   374
     * coordinates are not in bounds.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   375
     * @param x the X coordinate of the specified pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   376
     * @param y the Y coordinate of the specified pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   377
     * @param b the band to return, which is assumed to be 0
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   378
     * @param s the input sample as an <code>int</code>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   379
     * @param data the <code>DataBuffer</code> where image data is stored
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   380
     * @exception ArrayIndexOutOfBoundsException if the coordinates are
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   381
     * not in bounds.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   382
     * @see #getSample(int, int, int, DataBuffer)
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   383
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   384
    public void setSample(int x, int y, int b, int s,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   385
                          DataBuffer data) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   386
        // 'b' must be 0
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   387
        if ((x < 0) || (y < 0) || (x >= width) || (y >= height) ||
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   388
            (b != 0)) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   389
            throw new ArrayIndexOutOfBoundsException
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   390
                ("Coordinate out of bounds!");
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   391
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   392
        int bitnum = dataBitOffset + x * pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   393
        int index = y * scanlineStride + (bitnum / dataElementSize);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   394
        int shift = dataElementSize - (bitnum & (dataElementSize-1))
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   395
                    - pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   396
        int element = data.getElem(index);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   397
        element &= ~(bitMask << shift);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   398
        element |= (s & bitMask) << shift;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   399
        data.setElem(index,element);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   400
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   401
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   402
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   403
     * Returns data for a single pixel in a primitive array of type
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   404
     * TransferType.  For a <code>MultiPixelPackedSampleModel</code>,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   405
     * the array has one element, and the type is the smallest of
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   406
     * DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, or DataBuffer.TYPE_INT
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   407
     * that can hold a single pixel.  Generally, <code>obj</code>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   408
     * should be passed in as <code>null</code>, so that the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   409
     * <code>Object</code> is created automatically and is the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   410
     * correct primitive data type.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   411
     * <p>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   412
     * The following code illustrates transferring data for one pixel from
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   413
     * <code>DataBuffer</code> <code>db1</code>, whose storage layout is
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   414
     * described by <code>MultiPixelPackedSampleModel</code>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   415
     * <code>mppsm1</code>, to <code>DataBuffer</code> <code>db2</code>,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   416
     * whose storage layout is described by
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   417
     * <code>MultiPixelPackedSampleModel</code> <code>mppsm2</code>.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   418
     * The transfer is generally more efficient than using
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   419
     * <code>getPixel</code> or <code>setPixel</code>.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   420
     * <pre>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   421
     *       MultiPixelPackedSampleModel mppsm1, mppsm2;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   422
     *       DataBufferInt db1, db2;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   423
     *       mppsm2.setDataElements(x, y, mppsm1.getDataElements(x, y, null,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   424
     *                              db1), db2);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   425
     * </pre>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   426
     * Using <code>getDataElements</code> or <code>setDataElements</code>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   427
     * to transfer between two <code>DataBuffer/SampleModel</code> pairs
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   428
     * is legitimate if the <code>SampleModels</code> have the same number
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   429
     * of bands, corresponding bands have the same number of
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   430
     * bits per sample, and the TransferTypes are the same.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   431
     * <p>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   432
     * If <code>obj</code> is not <code>null</code>, it should be a
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   433
     * primitive array of type TransferType.  Otherwise, a
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   434
     * <code>ClassCastException</code> is thrown.  An
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   435
     * <code>ArrayIndexOutOfBoundsException</code> is thrown if the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   436
     * coordinates are not in bounds, or if <code>obj</code> is not
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   437
     * <code>null</code> and is not large enough to hold the pixel data.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   438
     * @param x the X coordinate of the specified pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   439
     * @param y the Y coordinate of the specified pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   440
     * @param obj a primitive array in which to return the pixel data or
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   441
     *          <code>null</code>.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   442
     * @param data the <code>DataBuffer</code> containing the image data.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   443
     * @return an <code>Object</code> containing data for the specified
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   444
     *  pixel.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   445
     * @exception ClassCastException if <code>obj</code> is not a
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   446
     *  primitive array of type TransferType or is not <code>null</code>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   447
     * @exception ArrayIndexOutOfBoundsException if the coordinates are
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   448
     * not in bounds, or if <code>obj</code> is not <code>null</code> or
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   449
     * not large enough to hold the pixel data
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   450
     * @see #setDataElements(int, int, Object, DataBuffer)
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   451
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   452
    public Object getDataElements(int x, int y, Object obj, DataBuffer data) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   453
        if ((x < 0) || (y < 0) || (x >= width) || (y >= height)) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   454
            throw new ArrayIndexOutOfBoundsException
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   455
                ("Coordinate out of bounds!");
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   456
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   457
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   458
        int type = getTransferType();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   459
        int bitnum = dataBitOffset + x*pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   460
        int shift = dataElementSize - (bitnum & (dataElementSize-1))
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   461
                    - pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   462
        int element = 0;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   463
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   464
        switch(type) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   465
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   466
        case DataBuffer.TYPE_BYTE:
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   467
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   468
            byte[] bdata;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   469
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   470
            if (obj == null)
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   471
                bdata = new byte[1];
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   472
            else
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   473
                bdata = (byte[])obj;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   474
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   475
            element = data.getElem(y*scanlineStride +
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   476
                                    bitnum/dataElementSize);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   477
            bdata[0] = (byte)((element >> shift) & bitMask);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   478
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   479
            obj = (Object)bdata;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   480
            break;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   481
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   482
        case DataBuffer.TYPE_USHORT:
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   483
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   484
            short[] sdata;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   485
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   486
            if (obj == null)
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   487
                sdata = new short[1];
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   488
            else
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   489
                sdata = (short[])obj;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   490
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   491
            element = data.getElem(y*scanlineStride +
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   492
                                   bitnum/dataElementSize);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   493
            sdata[0] = (short)((element >> shift) & bitMask);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   494
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   495
            obj = (Object)sdata;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   496
            break;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   497
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   498
        case DataBuffer.TYPE_INT:
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   499
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   500
            int[] idata;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   501
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   502
            if (obj == null)
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   503
                idata = new int[1];
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   504
            else
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   505
                idata = (int[])obj;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   506
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   507
            element = data.getElem(y*scanlineStride +
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   508
                                   bitnum/dataElementSize);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   509
            idata[0] = (element >> shift) & bitMask;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   510
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   511
            obj = (Object)idata;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   512
            break;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   513
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   514
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   515
        return obj;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   516
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   517
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   518
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   519
     * Returns the specified single band pixel in the first element
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   520
     * of an <code>int</code> array.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   521
     * <code>ArrayIndexOutOfBoundsException</code> is thrown if the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   522
     * coordinates are not in bounds.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   523
     * @param x the X coordinate of the specified pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   524
     * @param y the Y coordinate of the specified pixel
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   525
     * @param iArray the array containing the pixel to be returned or
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   526
     *  <code>null</code>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   527
     * @param data the <code>DataBuffer</code> where image data is stored
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   528
     * @return an array containing the specified pixel.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   529
     * @exception ArrayIndexOutOfBoundsException if the coordinates
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   530
     *  are not in bounds
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   531
     * @see #setPixel(int, int, int[], DataBuffer)
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   532
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   533
    public int[] getPixel(int x, int y, int iArray[], DataBuffer data) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   534
        if ((x < 0) || (y < 0) || (x >= width) || (y >= height)) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   535
            throw new ArrayIndexOutOfBoundsException
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   536
                ("Coordinate out of bounds!");
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   537
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   538
        int pixels[];
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   539
        if (iArray != null) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   540
           pixels = iArray;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   541
        } else {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   542
           pixels = new int [numBands];
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   543
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   544
        int bitnum = dataBitOffset + x*pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   545
        int element = data.getElem(y*scanlineStride + bitnum/dataElementSize);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   546
        int shift = dataElementSize - (bitnum & (dataElementSize-1))
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   547
                    - pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   548
        pixels[0] = (element >> shift) & bitMask;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   549
        return pixels;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   550
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   551
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   552
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   553
     * Sets the data for a single pixel in the specified
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   554
     * <code>DataBuffer</code> from a primitive array of type
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   555
     * TransferType.  For a <code>MultiPixelPackedSampleModel</code>,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   556
     * only the first element of the array holds valid data,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   557
     * and the type must be the smallest of
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   558
     * DataBuffer.TYPE_BYTE, DataBuffer.TYPE_USHORT, or DataBuffer.TYPE_INT
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   559
     * that can hold a single pixel.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   560
     * <p>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   561
     * The following code illustrates transferring data for one pixel from
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   562
     * <code>DataBuffer</code> <code>db1</code>, whose storage layout is
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   563
     * described by <code>MultiPixelPackedSampleModel</code>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   564
     * <code>mppsm1</code>, to <code>DataBuffer</code> <code>db2</code>,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   565
     * whose storage layout is described by
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   566
     * <code>MultiPixelPackedSampleModel</code> <code>mppsm2</code>.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   567
     * The transfer is generally more efficient than using
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   568
     * <code>getPixel</code> or <code>setPixel</code>.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   569
     * <pre>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   570
     *       MultiPixelPackedSampleModel mppsm1, mppsm2;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   571
     *       DataBufferInt db1, db2;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   572
     *       mppsm2.setDataElements(x, y, mppsm1.getDataElements(x, y, null,
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   573
     *                              db1), db2);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   574
     * </pre>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   575
     * Using <code>getDataElements</code> or <code>setDataElements</code> to
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   576
     * transfer between two <code>DataBuffer/SampleModel</code> pairs is
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   577
     * legitimate if the <code>SampleModel</code> objects have
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   578
     * the same number of bands, corresponding bands have the same number of
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   579
     * bits per sample, and the TransferTypes are the same.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   580
     * <p>
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   581
     * <code>obj</code> must be a primitive array of type TransferType.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   582
     * Otherwise, a <code>ClassCastException</code> is thrown.  An
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   583
     * <code>ArrayIndexOutOfBoundsException</code> is thrown if the
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   584
     * coordinates are not in bounds, or if <code>obj</code> is not large
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   585
     * enough to hold the pixel data.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   586
     * @param x the X coordinate of the pixel location
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   587
     * @param y the Y coordinate of the pixel location
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   588
     * @param obj a primitive array containing pixel data
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   589
     * @param data the <code>DataBuffer</code> containing the image data
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   590
     * @see #getDataElements(int, int, Object, DataBuffer)
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   591
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   592
    public void setDataElements(int x, int y, Object obj, DataBuffer data) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   593
        if ((x < 0) || (y < 0) || (x >= width) || (y >= height)) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   594
            throw new ArrayIndexOutOfBoundsException
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   595
                ("Coordinate out of bounds!");
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   596
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   597
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   598
        int type = getTransferType();
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   599
        int bitnum = dataBitOffset + x * pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   600
        int index = y * scanlineStride + (bitnum / dataElementSize);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   601
        int shift = dataElementSize - (bitnum & (dataElementSize-1))
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   602
                    - pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   603
        int element = data.getElem(index);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   604
        element &= ~(bitMask << shift);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   605
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   606
        switch(type) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   607
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   608
        case DataBuffer.TYPE_BYTE:
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   609
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   610
            byte[] barray = (byte[])obj;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   611
            element |= ( ((int)(barray[0])&0xff) & bitMask) << shift;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   612
            data.setElem(index, element);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   613
            break;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   614
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   615
        case DataBuffer.TYPE_USHORT:
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   616
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   617
            short[] sarray = (short[])obj;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   618
            element |= ( ((int)(sarray[0])&0xffff) & bitMask) << shift;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   619
            data.setElem(index, element);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   620
            break;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   621
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   622
        case DataBuffer.TYPE_INT:
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   623
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   624
            int[] iarray = (int[])obj;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   625
            element |= (iarray[0] & bitMask) << shift;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   626
            data.setElem(index, element);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   627
            break;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   628
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   629
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   630
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   631
    /**
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   632
     * Sets a pixel in the <code>DataBuffer</code> using an
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   633
     * <code>int</code> array for input.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   634
     * <code>ArrayIndexOutOfBoundsException</code> is thrown if
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   635
     * the coordinates are not in bounds.
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   636
     * @param x the X coordinate of the pixel location
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   637
     * @param y the Y coordinate of the pixel location
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   638
     * @param iArray the input pixel in an <code>int</code> array
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   639
     * @param data the <code>DataBuffer</code> containing the image data
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   640
     * @see #getPixel(int, int, int[], DataBuffer)
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   641
     */
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   642
    public void setPixel(int x, int y, int[] iArray, DataBuffer data) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   643
        if ((x < 0) || (y < 0) || (x >= width) || (y >= height)) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   644
            throw new ArrayIndexOutOfBoundsException
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   645
                ("Coordinate out of bounds!");
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   646
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   647
        int bitnum = dataBitOffset + x * pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   648
        int index = y * scanlineStride + (bitnum / dataElementSize);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   649
        int shift = dataElementSize - (bitnum & (dataElementSize-1))
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   650
                    - pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   651
        int element = data.getElem(index);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   652
        element &= ~(bitMask << shift);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   653
        element |= (iArray[0] & bitMask) << shift;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   654
        data.setElem(index,element);
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   655
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   656
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   657
    public boolean equals(Object o) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   658
        if ((o == null) || !(o instanceof MultiPixelPackedSampleModel)) {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   659
            return false;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   660
        }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   661
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   662
        MultiPixelPackedSampleModel that = (MultiPixelPackedSampleModel)o;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   663
        return this.width == that.width &&
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   664
            this.height == that.height &&
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   665
            this.numBands == that.numBands &&
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   666
            this.dataType == that.dataType &&
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   667
            this.pixelBitStride == that.pixelBitStride &&
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   668
            this.bitMask == that.bitMask &&
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   669
            this.pixelsPerDataElement == that.pixelsPerDataElement &&
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   670
            this.dataElementSize == that.dataElementSize &&
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   671
            this.dataBitOffset == that.dataBitOffset &&
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   672
            this.scanlineStride == that.scanlineStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   673
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   674
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   675
    // If we implement equals() we must also implement hashCode
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   676
    public int hashCode() {
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   677
        int hash = 0;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   678
        hash = width;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   679
        hash <<= 8;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   680
        hash ^= height;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   681
        hash <<= 8;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   682
        hash ^= numBands;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   683
        hash <<= 8;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   684
        hash ^= dataType;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   685
        hash <<= 8;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   686
        hash ^= pixelBitStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   687
        hash <<= 8;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   688
        hash ^= bitMask;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   689
        hash <<= 8;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   690
        hash ^= pixelsPerDataElement;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   691
        hash <<= 8;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   692
        hash ^= dataElementSize;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   693
        hash <<= 8;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   694
        hash ^= dataBitOffset;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   695
        hash <<= 8;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   696
        hash ^= scanlineStride;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   697
        return hash;
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   698
    }
7952521a4ad3 6662775: Move imaging and color classes from closed to open
prr
parents:
diff changeset
   699
}