135 lines
4.3 KiB
Java
135 lines
4.3 KiB
Java
/*
|
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
|
* contributor license agreements. See the NOTICE file distributed with
|
|
* this work for additional information regarding copyright ownership.
|
|
* The ASF licenses this file to You under the Apache License, Version 2.0
|
|
* (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
/**
|
|
* @author Igor V. Stolyarov
|
|
* @version $Revision$
|
|
*/
|
|
|
|
package java.awt.image;
|
|
|
|
import org.apache.harmony.awt.internal.nls.Messages;
|
|
|
|
/**
|
|
* The PixelInterleavedSampleModel class represents image data as represented as
|
|
* interleaved pixels and for which each sample of a pixel takes one data
|
|
* element of the DataBuffer.
|
|
*
|
|
* @since Android 1.0
|
|
*/
|
|
public class PixelInterleavedSampleModel extends ComponentSampleModel {
|
|
|
|
/**
|
|
* Instantiates a new PixelInterleavedSampleModel with the specified
|
|
* parameters.
|
|
*
|
|
* @param dataType
|
|
* the data type of the samples.
|
|
* @param w
|
|
* the width of the image data.
|
|
* @param h
|
|
* the height of the image data.
|
|
* @param pixelStride
|
|
* the pixel stride of the image data.
|
|
* @param scanlineStride
|
|
* the scanline stride of the of the image data.
|
|
* @param bandOffsets
|
|
* the array of the band offsets.
|
|
*/
|
|
public PixelInterleavedSampleModel(int dataType, int w, int h, int pixelStride,
|
|
int scanlineStride, int bandOffsets[]) {
|
|
|
|
super(dataType, w, h, pixelStride, scanlineStride, bandOffsets);
|
|
|
|
int maxOffset = bandOffsets[0];
|
|
int minOffset = bandOffsets[0];
|
|
for (int i = 1; i < bandOffsets.length; i++) {
|
|
if (bandOffsets[i] > maxOffset) {
|
|
maxOffset = bandOffsets[i];
|
|
}
|
|
if (bandOffsets[i] < minOffset) {
|
|
minOffset = bandOffsets[i];
|
|
}
|
|
}
|
|
|
|
maxOffset -= minOffset;
|
|
|
|
if (maxOffset > scanlineStride) {
|
|
// awt.241=Any offset between bands is greater than the Scanline
|
|
// stride
|
|
throw new IllegalArgumentException(Messages.getString("awt.241")); //$NON-NLS-1$
|
|
}
|
|
|
|
if (maxOffset > pixelStride) {
|
|
// awt.242=Pixel stride is less than any offset between bands
|
|
throw new IllegalArgumentException(Messages.getString("awt.242")); //$NON-NLS-1$
|
|
}
|
|
|
|
if (pixelStride * w > scanlineStride) {
|
|
// awt.243=Product of Pixel stride and w is greater than Scanline
|
|
// stride
|
|
throw new IllegalArgumentException(Messages.getString("awt.243")); //$NON-NLS-1$
|
|
}
|
|
|
|
}
|
|
|
|
@Override
|
|
public SampleModel createSubsetSampleModel(int bands[]) {
|
|
int newOffsets[] = new int[bands.length];
|
|
for (int i = 0; i < bands.length; i++) {
|
|
newOffsets[i] = bandOffsets[bands[i]];
|
|
}
|
|
|
|
return new PixelInterleavedSampleModel(dataType, width, height, pixelStride,
|
|
scanlineStride, newOffsets);
|
|
}
|
|
|
|
@Override
|
|
public SampleModel createCompatibleSampleModel(int w, int h) {
|
|
int newOffsets[];
|
|
int minOffset = bandOffsets[0];
|
|
|
|
for (int i = 1; i < numBands; i++) {
|
|
if (bandOffsets[i] < minOffset) {
|
|
minOffset = bandOffsets[i];
|
|
}
|
|
}
|
|
|
|
if (minOffset > 0) {
|
|
newOffsets = new int[numBands];
|
|
for (int i = 0; i < numBands; i++) {
|
|
newOffsets[i] = bandOffsets[i] - minOffset;
|
|
}
|
|
} else {
|
|
newOffsets = bandOffsets;
|
|
}
|
|
|
|
return new PixelInterleavedSampleModel(dataType, w, h, pixelStride, pixelStride * w,
|
|
newOffsets);
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
int hash = super.hashCode();
|
|
int tmp = hash >>> 8;
|
|
hash <<= 8;
|
|
hash |= tmp;
|
|
|
|
return hash ^ 0x66;
|
|
}
|
|
|
|
}
|