⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pixelinterleavedsamplemodel.java

📁 JAVA基本类源代码,大家可以学习学习!
💻 JAVA
字号:
/* * @(#)PixelInterleavedSampleModel.java	1.19 03/01/23 * * Copyright 2003 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package java.awt.image;/** *  This class represents image data which is stored in a pixel interleaved *  fashion and for *  which each sample of a pixel occupies one data element of the DataBuffer. *  It subclasses ComponentSampleModel but provides a more efficent *  implementation for accessing pixel interleaved image data than is provided *  by ComponentSampleModel.  This class  *  stores sample data for all bands in a single bank of the *  DataBuffer. Accessor methods are provided so that image data can be *  manipulated directly. Pixel stride is the number of *  data array elements between two samples for the same band on the same *  scanline. Scanline stride is the number of data array elements between *  a given sample and the corresponding sample in the same column of the next *  scanline.  Band offsets denote the number *  of data array elements from the first data array element of the bank *  of the DataBuffer holding each band to the first sample of the band. *  The bands are numbered from 0 to N-1. *  Bank indices denote the correspondence between a bank of the data buffer *  and a band of image data. *  This class supports *  {@link DataBuffer#TYPE_BYTE TYPE_BYTE}, *  {@link DataBuffer#TYPE_USHORT TYPE_USHORT}, *  {@link DataBuffer#TYPE_SHORT TYPE_SHORT}, *  {@link DataBuffer#TYPE_INT TYPE_INT}, *  {@link DataBuffer#TYPE_FLOAT TYPE_FLOAT} and *  {@link DataBuffer#TYPE_DOUBLE TYPE_DOUBLE} datatypes.   */public class PixelInterleavedSampleModel extends ComponentSampleModel{    /**     * Constructs a PixelInterleavedSampleModel with the specified parameters.     * The number of bands will be given by the length of the bandOffsets      * array.     * @param dataType  The data type for storing samples.     * @param w         The width (in pixels) of the region of     *                  image data described.     * @param h         The height (in pixels) of the region of     *                  image data described.     * @param pixelStride The pixel stride of the image data.     * @param scanlineStride The line stride of the image data.     * @param bandOffsets The offsets of all bands.     * @throws IllegalArgumentException if <code>w</code> or     *         <code>h</code> is not greater than 0     * @throws IllegalArgumentException if any offset between bands is     *         greater than the scanline stride     * @throws IllegalArgumentException if the product of      *         <code>pixelStride</code> and <code>w</code> is greater     *         than <code>scanlineStride</code>     * @throws IllegalArgumentException if <code>pixelStride</code> is      *         less than any offset between bands     * @throws IllegalArgumentException if <code>dataType</code> is not     *         one of the supported data types     */    public PixelInterleavedSampleModel(int dataType,                                       int w, int h,                                       int pixelStride,                                       int scanlineStride,                                       int bandOffsets[]) {        super(dataType, w, h, pixelStride, scanlineStride, bandOffsets);        int minBandOff=bandOffsets[0];        int maxBandOff=bandOffsets[0];        for (int i=1; i<bandOffsets.length; i++) {            minBandOff = Math.min(minBandOff,bandOffsets[i]);            maxBandOff = Math.max(maxBandOff,bandOffsets[i]);        }        maxBandOff -= minBandOff;        if (maxBandOff > scanlineStride) {            throw new IllegalArgumentException("Offsets between bands must be"+                                               " less than the scanline "+                                               " stride");        }        if (pixelStride*w > scanlineStride) {            throw new IllegalArgumentException("Pixel stride times width "+                                               "must be less than or "+                                               "equal to the scanline "+                                               "stride");        }        if (pixelStride < maxBandOff) {            throw new IllegalArgumentException("Pixel stride must be greater"+                                               " than or equal to the offsets"+                                               " between bands");        }    }    /**     * Creates a new PixelInterleavedSampleModel with the specified     * width and height.  The new PixelInterleavedSampleModel will have the     * same number of bands, storage data type, and pixel stride     * as this PixelInterleavedSampleModel.  The band offsets may be     * compressed such that the minimum of all of the band offsets is zero.     * @param w the width of the resulting <code>SampleModel</code>     * @param h the height of the resulting <code>SampleModel</code>     * @return a new <code>SampleModel</code> with the specified width     *         and height.     * @throws IllegalArgumentException if <code>w</code> or     *         <code>h</code> is not greater than 0     */    public SampleModel createCompatibleSampleModel(int w, int h) {        int minBandoff=bandOffsets[0];        int numBands = bandOffsets.length;        for (int i=1; i < numBands; i++) {            if (bandOffsets[i] < minBandoff) {                minBandoff = bandOffsets[i];            }        }        int[] bandOff;        if (minBandoff > 0) {            bandOff = new int[numBands];            for (int i=0; i < numBands; i++) {                bandOff[i] = bandOffsets[i] - minBandoff;            }        }        else {            bandOff = bandOffsets;        }        return new PixelInterleavedSampleModel(dataType, w, h, pixelStride,                                               pixelStride*w, bandOff);    }    /**     * Creates a new PixelInterleavedSampleModel with a subset of the     * bands of this PixelInterleavedSampleModel.  The new     * PixelInterleavedSampleModel can be used with any DataBuffer that the     * existing PixelInterleavedSampleModel can be used with.  The new     * PixelInterleavedSampleModel/DataBuffer combination will represent     * an image with a subset of the bands of the original     * PixelInterleavedSampleModel/DataBuffer combination.     */    public SampleModel createSubsetSampleModel(int bands[]) {        int newBandOffsets[] = new int[bands.length];        for (int i=0; i<bands.length; i++) {            newBandOffsets[i] = bandOffsets[bands[i]];        }        return new PixelInterleavedSampleModel(this.dataType, width, height,                                               this.pixelStride,                                               scanlineStride, newBandOffsets);    }    // Differentiate hash code from other ComponentSampleModel subclasses    public int hashCode() {        return super.hashCode() ^ 0x1;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -