summaryrefslogtreecommitdiff
path: root/libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java')
-rw-r--r--libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java29
1 files changed, 27 insertions, 2 deletions
diff --git a/libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java b/libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java
index 4c5c436edfc..3a0d4152c7d 100644
--- a/libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java
+++ b/libjava/classpath/java/awt/image/PixelInterleavedSampleModel.java
@@ -69,9 +69,34 @@ public class PixelInterleavedSampleModel
*/
public SampleModel createCompatibleSampleModel(int width, int height)
{
+ // Find minimum band offset.
+ int minBandoff = bandOffsets[0];
+ int numBands = bandOffsets.length;
+ for (int i = 1; i < numBands; i++)
+ {
+ if (bandOffsets[i] < minBandoff)
+ {
+ minBandoff = bandOffsets[i];
+ }
+ }
+ // Adjust band offsets so that minimum offset is at 0.
+ int[] bandOff;
+ if (minBandoff > 0)
+ {
+ bandOff = new int[numBands];
+ for (int i = 0; i < numBands; i++)
+ {
+ bandOff[i] = bandOffsets[i] - minBandoff;
+ }
+ }
+ else
+ {
+ bandOff = bandOffsets;
+ }
+ // Adjust scanline stride for new width.
return new PixelInterleavedSampleModel(dataType, width, height,
- pixelStride, scanlineStride,
- bandOffsets);
+ pixelStride, pixelStride * width,
+ bandOff);
}