< prev index next >
src/java.desktop/share/classes/java/awt/image/Raster.java
Print this page
@@ -1,7 +1,7 @@
/*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
@@ -643,19 +643,30 @@
pixelStride,
scanlineStride,
bandOffsets);
switch(dataType) {
case DataBuffer.TYPE_BYTE:
- return new ByteInterleavedRaster(csm, dataBuffer, location);
+ if (dataBuffer instanceof DataBufferByte) {
+ return new ByteInterleavedRaster(csm,
+ (DataBufferByte)dataBuffer, location);
+ }
+ break;
case DataBuffer.TYPE_USHORT:
- return new ShortInterleavedRaster(csm, dataBuffer, location);
+ if (dataBuffer instanceof DataBufferUShort) {
+ return new ShortInterleavedRaster(csm,
+ (DataBufferUShort)dataBuffer, location);
+ }
+ break;
default:
throw new IllegalArgumentException("Unsupported data type " +
dataType);
}
+
+ // Create the generic raster
+ return new SunWritableRaster(csm, dataBuffer, location);
}
/**
* Creates a Raster based on a BandedSampleModel with the
* specified DataBuffer, width, height, scanline stride, bank
@@ -711,22 +722,37 @@
scanlineStride,
bankIndices, bandOffsets);
switch(dataType) {
case DataBuffer.TYPE_BYTE:
- return new ByteBandedRaster(bsm, dataBuffer, location);
+ if (dataBuffer instanceof DataBufferByte) {
+ return new ByteBandedRaster(bsm,
+ (DataBufferByte)dataBuffer, location);
+ }
+ break;
case DataBuffer.TYPE_USHORT:
- return new ShortBandedRaster(bsm, dataBuffer, location);
+ if (dataBuffer instanceof DataBufferUShort) {
+ return new ShortBandedRaster(bsm,
+ (DataBufferUShort)dataBuffer, location);
+ }
+ break;
case DataBuffer.TYPE_INT:
- return new SunWritableRaster(bsm, dataBuffer, location);
+ if (dataBuffer instanceof DataBufferInt) {
+ return new SunWritableRaster(bsm,
+ (DataBufferInt)dataBuffer, location);
+ }
+ break;
default:
throw new IllegalArgumentException("Unsupported data type " +
dataType);
}
+
+ // Create the generic raster
+ return new SunWritableRaster(bsm, dataBuffer, location);
}
/**
* Creates a Raster based on a SinglePixelPackedSampleModel with
* the specified DataBuffer, width, height, scanline stride, and
@@ -774,22 +800,37 @@
new SinglePixelPackedSampleModel(dataType, w, h, scanlineStride,
bandMasks);
switch(dataType) {
case DataBuffer.TYPE_BYTE:
- return new ByteInterleavedRaster(sppsm, dataBuffer, location);
+ if (dataBuffer instanceof DataBufferByte) {
+ return new ByteInterleavedRaster(sppsm,
+ (DataBufferByte)dataBuffer, location);
+ }
+ break;
case DataBuffer.TYPE_USHORT:
- return new ShortInterleavedRaster(sppsm, dataBuffer, location);
+ if (dataBuffer instanceof DataBufferUShort) {
+ return new ShortInterleavedRaster(sppsm,
+ (DataBufferUShort)dataBuffer, location);
+ }
+ break;
case DataBuffer.TYPE_INT:
- return new IntegerInterleavedRaster(sppsm, dataBuffer, location);
+ if (dataBuffer instanceof DataBufferInt) {
+ return new IntegerInterleavedRaster(sppsm,
+ (DataBufferInt)dataBuffer, location);
+ }
+ break;
default:
throw new IllegalArgumentException("Unsupported data type " +
dataType);
}
+
+ // Create the generic raster
+ return new SunWritableRaster(sppsm, dataBuffer, location);
}
/**
* Creates a Raster based on a MultiPixelPackedSampleModel with the
* specified DataBuffer, width, height, and bits per pixel. The upper
@@ -844,13 +885,13 @@
}
MultiPixelPackedSampleModel mppsm =
new MultiPixelPackedSampleModel(dataType, w, h, bitsPerPixel);
- if (dataType == DataBuffer.TYPE_BYTE &&
+ if (dataBuffer instanceof DataBufferByte &&
(bitsPerPixel == 1 || bitsPerPixel == 2 || bitsPerPixel == 4)) {
- return new BytePackedRaster(mppsm, dataBuffer, location);
+ return new BytePackedRaster(mppsm, (DataBufferByte)dataBuffer, location);
} else {
return new SunWritableRaster(mppsm, dataBuffer, location);
}
}
@@ -889,35 +930,55 @@
int dataType = sm.getDataType();
if (sm instanceof PixelInterleavedSampleModel) {
switch(dataType) {
case DataBuffer.TYPE_BYTE:
- return new ByteInterleavedRaster(sm, db, location);
+ if (db instanceof DataBufferByte) {
+ return new ByteInterleavedRaster(sm,
+ (DataBufferByte)db, location);
+ }
+ break;
case DataBuffer.TYPE_USHORT:
- return new ShortInterleavedRaster(sm, db, location);
+ if (db instanceof DataBufferUShort) {
+ return new ShortInterleavedRaster(sm,
+ (DataBufferUShort)db, location);
+ }
+ break;
}
} else if (sm instanceof SinglePixelPackedSampleModel) {
switch(dataType) {
case DataBuffer.TYPE_BYTE:
- return new ByteInterleavedRaster(sm, db, location);
+ if (db instanceof DataBufferByte) {
+ return new ByteInterleavedRaster(sm,
+ (DataBufferByte)db, location);
+ }
+ break;
case DataBuffer.TYPE_USHORT:
- return new ShortInterleavedRaster(sm, db, location);
+ if (db instanceof DataBufferUShort) {
+ return new ShortInterleavedRaster(sm,
+ (DataBufferUShort)db, location);
+ }
+ break;
case DataBuffer.TYPE_INT:
- return new IntegerInterleavedRaster(sm, db, location);
+ if (db instanceof DataBufferInt) {
+ return new IntegerInterleavedRaster(sm,
+ (DataBufferInt)db, location);
+ }
+ break;
}
} else if (sm instanceof MultiPixelPackedSampleModel &&
dataType == DataBuffer.TYPE_BYTE &&
+ db instanceof DataBufferByte &&
sm.getSampleSize(0) < 8) {
- return new BytePackedRaster(sm, db, location);
+ return new BytePackedRaster(sm, (DataBufferByte)db, location);
}
// we couldn't do anything special - do the generic thing
-
- return new Raster(sm,db,location);
+ return new Raster(sm, db, location);
}
/**
* Creates a WritableRaster with the specified SampleModel.
* The upper left corner of the Raster is given by the location argument.
@@ -975,34 +1036,54 @@
int dataType = sm.getDataType();
if (sm instanceof PixelInterleavedSampleModel) {
switch(dataType) {
case DataBuffer.TYPE_BYTE:
- return new ByteInterleavedRaster(sm, db, location);
+ if (db instanceof DataBufferByte) {
+ return new ByteInterleavedRaster(sm,
+ (DataBufferByte)db, location);
+ }
+ break;
case DataBuffer.TYPE_USHORT:
- return new ShortInterleavedRaster(sm, db, location);
+ if (db instanceof DataBufferUShort) {
+ return new ShortInterleavedRaster(sm,
+ (DataBufferUShort)db, location);
+ }
+ break;
}
} else if (sm instanceof SinglePixelPackedSampleModel) {
switch(dataType) {
case DataBuffer.TYPE_BYTE:
- return new ByteInterleavedRaster(sm, db, location);
+ if (db instanceof DataBufferByte) {
+ return new ByteInterleavedRaster(sm,
+ (DataBufferByte)db, location);
+ }
+ break;
case DataBuffer.TYPE_USHORT:
- return new ShortInterleavedRaster(sm, db, location);
+ if (db instanceof DataBufferUShort) {
+ return new ShortInterleavedRaster(sm,
+ (DataBufferUShort)db, location);
+ }
+ break;
case DataBuffer.TYPE_INT:
- return new IntegerInterleavedRaster(sm, db, location);
+ if (db instanceof DataBufferInt) {
+ return new IntegerInterleavedRaster(sm,
+ (DataBufferInt)db, location);
+ }
+ break;
}
} else if (sm instanceof MultiPixelPackedSampleModel &&
dataType == DataBuffer.TYPE_BYTE &&
+ db instanceof DataBufferByte &&
sm.getSampleSize(0) < 8) {
- return new BytePackedRaster(sm, db, location);
+ return new BytePackedRaster(sm, (DataBufferByte)db, location);
}
// we couldn't do anything special - do the generic thing
-
return new SunWritableRaster(sm,db,location);
}
/**
* Constructs a Raster with the given SampleModel. The Raster's
< prev index next >