6353518: Creation of a WritableRaster with a custom DataBuffer causes erroneous Exception
Reviewed-by: serb, prr, flar
--- a/jdk/src/java.desktop/macosx/classes/sun/java2d/IntegerNIORaster.java Wed Mar 30 17:17:00 2016 +0530
+++ b/jdk/src/java.desktop/macosx/classes/sun/java2d/IntegerNIORaster.java Thu Mar 31 15:30:05 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2011, 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
@@ -40,7 +40,7 @@
") cannot be <= 0");
}
// This is cribbed from java.awt.image.Raster.
- DataBuffer db = new DataBufferNIOInt(w * h);
+ DataBufferNIOInt db = new DataBufferNIOInt(w * h);
if (location == null) {
location = new Point(0, 0);
}
@@ -48,13 +48,11 @@
return new IntegerNIORaster(sppsm, db, location);
}
- public IntegerNIORaster(SampleModel sampleModel, DataBuffer dataBuffer, Point origin) {
+ public IntegerNIORaster(SampleModel sampleModel, DataBufferNIOInt dataBuffer, Point origin) {
// This is all cribbed from sun.awt.image.IntegerInterleavedRaster & sun.awt.image.IntegerComponentRaster
super(sampleModel, dataBuffer, new Rectangle(origin.x, origin.y, sampleModel.getWidth(), sampleModel.getHeight()), origin, null);
- if (!(dataBuffer instanceof DataBufferNIOInt)) {
- throw new RasterFormatException("IntegerNIORasters must have DataBufferNIOInt DataBuffers");
- }
- this.data = ((DataBufferNIOInt)dataBuffer).getBuffer();
+
+ this.data = dataBuffer.getBuffer();
}
public WritableRaster createCompatibleWritableRaster() {
--- a/jdk/src/java.desktop/share/classes/java/awt/image/Raster.java Wed Mar 30 17:17:00 2016 +0530
+++ b/jdk/src/java.desktop/share/classes/java/awt/image/Raster.java Thu Mar 31 15:30:05 2016 +0530
@@ -1,5 +1,5 @@
/*
- * 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
@@ -629,7 +629,8 @@
int scanlineStride,
int pixelStride,
int bandOffsets[],
- Point location) {
+ Point location)
+ {
if (dataBuffer == null) {
throw new NullPointerException("DataBuffer cannot be null");
}
@@ -645,15 +646,26 @@
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);
}
/**
@@ -691,7 +703,8 @@
int scanlineStride,
int bankIndices[],
int bandOffsets[],
- Point location) {
+ Point location)
+ {
if (dataBuffer == null) {
throw new NullPointerException("DataBuffer cannot be null");
}
@@ -713,18 +726,29 @@
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);
+ break;
default:
throw new IllegalArgumentException("Unsupported data type " +
dataType);
}
+
+ // Create the generic raster
+ return new SunWritableRaster(bsm, dataBuffer, location);
}
/**
@@ -761,7 +785,8 @@
int w, int h,
int scanlineStride,
int bandMasks[],
- Point location) {
+ Point location)
+ {
if (dataBuffer == null) {
throw new NullPointerException("DataBuffer cannot be null");
}
@@ -776,18 +801,33 @@
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);
}
/**
@@ -821,7 +861,8 @@
public static WritableRaster createPackedRaster(DataBuffer dataBuffer,
int w, int h,
int bitsPerPixel,
- Point location) {
+ Point location)
+ {
if (dataBuffer == null) {
throw new NullPointerException("DataBuffer cannot be null");
}
@@ -846,9 +887,10 @@
MultiPixelPackedSampleModel mppsm =
new MultiPixelPackedSampleModel(dataType, w, h, bitsPerPixel);
- if (dataType == DataBuffer.TYPE_BYTE &&
- (bitsPerPixel == 1 || bitsPerPixel == 2 || bitsPerPixel == 4)) {
- return new BytePackedRaster(mppsm, dataBuffer, location);
+ if (dataBuffer instanceof DataBufferByte &&
+ (bitsPerPixel == 1 || bitsPerPixel == 2 || bitsPerPixel == 4))
+ {
+ return new BytePackedRaster(mppsm, (DataBufferByte) dataBuffer, location);
} else {
return new SunWritableRaster(mppsm, dataBuffer, location);
}
@@ -878,7 +920,8 @@
*/
public static Raster createRaster(SampleModel sm,
DataBuffer db,
- Point location) {
+ Point location)
+ {
if ((sm == null) || (db == null)) {
throw new NullPointerException("SampleModel and DataBuffer cannot be null");
}
@@ -890,32 +933,53 @@
if (sm instanceof PixelInterleavedSampleModel) {
switch(dataType) {
- case DataBuffer.TYPE_BYTE:
- return new ByteInterleavedRaster(sm, db, location);
+ case DataBuffer.TYPE_BYTE:
+ if (db instanceof DataBufferByte) {
+ return new ByteInterleavedRaster(sm,
+ (DataBufferByte) db, location);
+ }
+ break;
- case DataBuffer.TYPE_USHORT:
- return new ShortInterleavedRaster(sm, db, location);
+ case DataBuffer.TYPE_USHORT:
+ 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);
+ case DataBuffer.TYPE_BYTE:
+ if (db instanceof DataBufferByte) {
+ return new ByteInterleavedRaster(sm,
+ (DataBufferByte) db, location);
+ }
+ break;
- case DataBuffer.TYPE_USHORT:
- return new ShortInterleavedRaster(sm, db, location);
+ case DataBuffer.TYPE_USHORT:
+ if (db instanceof DataBufferUShort) {
+ return new ShortInterleavedRaster(sm,
+ (DataBufferUShort) db, location);
+ }
+ break;
- case DataBuffer.TYPE_INT:
- return new IntegerInterleavedRaster(sm, db, location);
+ case DataBuffer.TYPE_INT:
+ if (db instanceof DataBufferInt) {
+ return new IntegerInterleavedRaster(sm,
+ (DataBufferInt) db, location);
+ }
+ break;
}
} else if (sm instanceof MultiPixelPackedSampleModel &&
dataType == DataBuffer.TYPE_BYTE &&
- sm.getSampleSize(0) < 8) {
- return new BytePackedRaster(sm, db, location);
+ db instanceof DataBufferByte &&
+ sm.getSampleSize(0) < 8)
+ {
+ 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);
}
/**
@@ -964,7 +1028,8 @@
*/
public static WritableRaster createWritableRaster(SampleModel sm,
DataBuffer db,
- Point location) {
+ Point location)
+ {
if ((sm == null) || (db == null)) {
throw new NullPointerException("SampleModel and DataBuffer cannot be null");
}
@@ -976,32 +1041,53 @@
if (sm instanceof PixelInterleavedSampleModel) {
switch(dataType) {
- case DataBuffer.TYPE_BYTE:
- return new ByteInterleavedRaster(sm, db, location);
+ case DataBuffer.TYPE_BYTE:
+ if (db instanceof DataBufferByte) {
+ return new ByteInterleavedRaster(sm,
+ (DataBufferByte) db, location);
+ }
+ break;
- case DataBuffer.TYPE_USHORT:
- return new ShortInterleavedRaster(sm, db, location);
+ case DataBuffer.TYPE_USHORT:
+ 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);
+ case DataBuffer.TYPE_BYTE:
+ if (db instanceof DataBufferByte) {
+ return new ByteInterleavedRaster(sm,
+ (DataBufferByte) db, location);
+ }
+ break;
- case DataBuffer.TYPE_USHORT:
- return new ShortInterleavedRaster(sm, db, location);
+ case DataBuffer.TYPE_USHORT:
+ if (db instanceof DataBufferUShort) {
+ return new ShortInterleavedRaster(sm,
+ (DataBufferUShort) db, location);
+ }
+ break;
- case DataBuffer.TYPE_INT:
- return new IntegerInterleavedRaster(sm, db, location);
+ case DataBuffer.TYPE_INT:
+ if (db instanceof DataBufferInt) {
+ return new IntegerInterleavedRaster(sm,
+ (DataBufferInt) db, location);
+ }
+ break;
}
} else if (sm instanceof MultiPixelPackedSampleModel &&
dataType == DataBuffer.TYPE_BYTE &&
- sm.getSampleSize(0) < 8) {
- return new BytePackedRaster(sm, db, location);
+ db instanceof DataBufferByte &&
+ sm.getSampleSize(0) < 8)
+ {
+ return new BytePackedRaster(sm, (DataBufferByte) db, location);
}
// we couldn't do anything special - do the generic thing
-
- return new SunWritableRaster(sm,db,location);
+ return new SunWritableRaster(sm, db, location);
}
/**
--- a/jdk/src/java.desktop/share/classes/sun/awt/image/ByteBandedRaster.java Wed Mar 30 17:17:00 2016 +0530
+++ b/jdk/src/java.desktop/share/classes/sun/awt/image/ByteBandedRaster.java Thu Mar 31 15:30:05 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, 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
@@ -29,7 +29,6 @@
import java.awt.image.RasterFormatException;
import java.awt.image.SampleModel;
import java.awt.image.BandedSampleModel;
-import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.awt.Rectangle;
import java.awt.Point;
@@ -74,10 +73,9 @@
* @param sampleModel The SampleModel that specifies the layout.
* @param origin The Point that specifies the origin.
*/
- public ByteBandedRaster(SampleModel sampleModel,
- Point origin) {
+ public ByteBandedRaster(SampleModel sampleModel, Point origin) {
this(sampleModel,
- sampleModel.createDataBuffer(),
+ (DataBufferByte) sampleModel.createDataBuffer(),
new Rectangle(origin.x,
origin.y,
sampleModel.getWidth(),
@@ -93,12 +91,13 @@
* initialized and must be a DataBufferShort compatible with SampleModel.
* SampleModel must be of type BandedSampleModel.
* @param sampleModel The SampleModel that specifies the layout.
- * @param dataBuffer The DataBufferShort that contains the image data.
+ * @param dataBuffer The DataBufferByte that contains the image data.
* @param origin The Point that specifies the origin.
*/
public ByteBandedRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Point origin) {
+ DataBufferByte dataBuffer,
+ Point origin)
+ {
this(sampleModel, dataBuffer,
new Rectangle(origin.x , origin.y,
sampleModel.getWidth(),
@@ -119,39 +118,33 @@
* Note that this constructor should generally be called by other
* constructors or create methods, it should not be used directly.
* @param sampleModel The SampleModel that specifies the layout.
- * @param dataBuffer The DataBufferShort that contains the image data.
+ * @param dataBuffer The DataBufferByte that contains the image data.
* @param aRegion The Rectangle that specifies the image area.
* @param origin The Point that specifies the origin.
* @param parent The parent (if any) of this raster.
*/
public ByteBandedRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
+ DataBufferByte dataBuffer,
Rectangle aRegion,
Point origin,
- ByteBandedRaster parent) {
-
+ ByteBandedRaster parent)
+ {
super(sampleModel, dataBuffer, aRegion, origin, parent);
this.maxX = minX + width;
this.maxY = minY + height;
- if (!(dataBuffer instanceof DataBufferByte)) {
- throw new RasterFormatException("ByteBandedRaster must have" +
- "byte DataBuffers");
- }
- DataBufferByte dbb = (DataBufferByte)dataBuffer;
-
if (sampleModel instanceof BandedSampleModel) {
BandedSampleModel bsm = (BandedSampleModel)sampleModel;
this.scanlineStride = bsm.getScanlineStride();
int bankIndices[] = bsm.getBankIndices();
int bandOffsets[] = bsm.getBandOffsets();
- int dOffsets[] = dbb.getOffsets();
+ int dOffsets[] = dataBuffer.getOffsets();
dataOffsets = new int[bankIndices.length];
data = new byte[bankIndices.length][];
int xOffset = aRegion.x - origin.x;
int yOffset = aRegion.y - origin.y;
for (int i = 0; i < bankIndices.length; i++) {
- data[i] = stealData(dbb, bankIndices[i]);
+ data[i] = stealData(dataBuffer, bankIndices[i]);
dataOffsets[i] = dOffsets[bankIndices[i]] +
xOffset + yOffset*scanlineStride + bandOffsets[i];
}
@@ -672,7 +665,7 @@
int deltaY = y0 - y;
return new ByteBandedRaster(sm,
- dataBuffer,
+ (DataBufferByte) dataBuffer,
new Rectangle(x0,y0,width,height),
new Point(sampleModelTranslateX+deltaX,
sampleModelTranslateY+deltaY),
--- a/jdk/src/java.desktop/share/classes/sun/awt/image/ByteComponentRaster.java Wed Mar 30 17:17:00 2016 +0530
+++ b/jdk/src/java.desktop/share/classes/sun/awt/image/ByteComponentRaster.java Thu Mar 31 15:30:05 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, 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
@@ -30,7 +30,6 @@
import java.awt.image.SampleModel;
import java.awt.image.ComponentSampleModel;
import java.awt.image.SinglePixelPackedSampleModel;
-import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.awt.Rectangle;
import java.awt.Point;
@@ -94,7 +93,7 @@
*/
public ByteComponentRaster(SampleModel sampleModel, Point origin) {
this(sampleModel,
- sampleModel.createDataBuffer(),
+ (DataBufferByte) sampleModel.createDataBuffer(),
new Rectangle(origin.x,
origin.y,
sampleModel.getWidth(),
@@ -111,12 +110,13 @@
* SampleModel must be of type SinglePixelPackedSampleModel
* or ComponentSampleModel.
* @param sampleModel The SampleModel that specifies the layout.
- * @param dataBuffer The DataBufferShort that contains the image data.
+ * @param dataBuffer The DataBufferByte that contains the image data.
* @param origin The Point that specifies the origin.
*/
public ByteComponentRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Point origin) {
+ DataBufferByte dataBuffer,
+ Point origin)
+ {
this(sampleModel,
dataBuffer,
new Rectangle(origin.x,
@@ -141,33 +141,28 @@
* Note that this constructor should generally be called by other
* constructors or create methods, it should not be used directly.
* @param sampleModel The SampleModel that specifies the layout.
- * @param dataBuffer The DataBufferShort that contains the image data.
+ * @param dataBuffer The DataBufferByte that contains the image data.
* @param aRegion The Rectangle that specifies the image area.
* @param origin The Point that specifies the origin.
* @param parent The parent (if any) of this raster.
*/
public ByteComponentRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Rectangle aRegion,
- Point origin,
- ByteComponentRaster parent) {
+ DataBufferByte dataBuffer,
+ Rectangle aRegion,
+ Point origin,
+ ByteComponentRaster parent)
+ {
super(sampleModel, dataBuffer, aRegion, origin, parent);
this.maxX = minX + width;
this.maxY = minY + height;
- if (!(dataBuffer instanceof DataBufferByte)) {
- throw new RasterFormatException("ByteComponentRasters must have " +
- "byte DataBuffers");
- }
-
- DataBufferByte dbb = (DataBufferByte)dataBuffer;
- this.data = stealData(dbb, 0);
- if (dbb.getNumBanks() != 1) {
+ this.data = stealData(dataBuffer, 0);
+ if (dataBuffer.getNumBanks() != 1) {
throw new
RasterFormatException("DataBuffer for ByteComponentRasters"+
" must only have 1 bank.");
}
- int dbOffset = dbb.getOffset();
+ int dbOffset = dataBuffer.getOffset();
if (sampleModel instanceof ComponentSampleModel) {
ComponentSampleModel ism = (ComponentSampleModel)sampleModel;
@@ -823,7 +818,7 @@
int deltaY = y0 - y;
return new ByteComponentRaster(sm,
- dataBuffer,
+ (DataBufferByte) dataBuffer,
new Rectangle(x0, y0, width, height),
new Point(sampleModelTranslateX+deltaX,
sampleModelTranslateY+deltaY),
--- a/jdk/src/java.desktop/share/classes/sun/awt/image/ByteInterleavedRaster.java Wed Mar 30 17:17:00 2016 +0530
+++ b/jdk/src/java.desktop/share/classes/sun/awt/image/ByteInterleavedRaster.java Thu Mar 31 15:30:05 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -31,7 +31,6 @@
import java.awt.image.ComponentSampleModel;
import java.awt.image.PixelInterleavedSampleModel;
import java.awt.image.SinglePixelPackedSampleModel;
-import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.awt.Rectangle;
import java.awt.Point;
@@ -87,7 +86,7 @@
*/
public ByteInterleavedRaster(SampleModel sampleModel, Point origin) {
this(sampleModel,
- sampleModel.createDataBuffer(),
+ (DataBufferByte) sampleModel.createDataBuffer(),
new Rectangle(origin.x,
origin.y,
sampleModel.getWidth(),
@@ -104,12 +103,13 @@
* SampleModel must be of type SinglePixelPackedSampleModel
* or InterleavedSampleModel.
* @param sampleModel The SampleModel that specifies the layout.
- * @param dataBuffer The DataBufferShort that contains the image data.
+ * @param dataBuffer The DataBufferByte that contains the image data.
* @param origin The Point that specifies the origin.
*/
public ByteInterleavedRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Point origin) {
+ DataBufferByte dataBuffer,
+ Point origin)
+ {
this(sampleModel,
dataBuffer,
new Rectangle(origin.x,
@@ -178,27 +178,22 @@
* Note that this constructor should generally be called by other
* constructors or create methods, it should not be used directly.
* @param sampleModel The SampleModel that specifies the layout.
- * @param dataBuffer The DataBufferShort that contains the image data.
+ * @param dataBuffer The DataBufferByte that contains the image data.
* @param aRegion The Rectangle that specifies the image area.
* @param origin The Point that specifies the origin.
* @param parent The parent (if any) of this raster.
*/
public ByteInterleavedRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Rectangle aRegion,
- Point origin,
- ByteInterleavedRaster parent) {
+ DataBufferByte dataBuffer,
+ Rectangle aRegion,
+ Point origin,
+ ByteInterleavedRaster parent)
+ {
super(sampleModel, dataBuffer, aRegion, origin, parent);
this.maxX = minX + width;
this.maxY = minY + height;
- if (!(dataBuffer instanceof DataBufferByte)) {
- throw new RasterFormatException("ByteInterleavedRasters must have " +
- "byte DataBuffers");
- }
-
- DataBufferByte dbb = (DataBufferByte)dataBuffer;
- this.data = stealData(dbb, 0);
+ this.data = stealData(dataBuffer, 0);
int xOffset = aRegion.x - origin.x;
int yOffset = aRegion.y - origin.y;
@@ -221,7 +216,7 @@
this.scanlineStride = sppsm.getScanlineStride();
this.pixelStride = 1;
this.dataOffsets = new int[1];
- this.dataOffsets[0] = dbb.getOffset();
+ this.dataOffsets[0] = dataBuffer.getOffset();
dataOffsets[0] += xOffset*pixelStride+yOffset*scanlineStride;
} else {
throw new RasterFormatException("ByteInterleavedRasters must " +
@@ -1259,7 +1254,7 @@
int deltaY = y0 - y;
return new ByteInterleavedRaster(sm,
- dataBuffer,
+ (DataBufferByte) dataBuffer,
new Rectangle(x0, y0, width, height),
new Point(sampleModelTranslateX+deltaX,
sampleModelTranslateY+deltaY),
--- a/jdk/src/java.desktop/share/classes/sun/awt/image/BytePackedRaster.java Wed Mar 30 17:17:00 2016 +0530
+++ b/jdk/src/java.desktop/share/classes/sun/awt/image/BytePackedRaster.java Thu Mar 31 15:30:05 2016 +0530
@@ -1,5 +1,5 @@
/*
- * 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
@@ -29,7 +29,6 @@
import java.awt.image.RasterFormatException;
import java.awt.image.SampleModel;
import java.awt.image.MultiPixelPackedSampleModel;
-import java.awt.image.DataBuffer;
import java.awt.image.DataBufferByte;
import java.awt.Rectangle;
import java.awt.Point;
@@ -89,10 +88,9 @@
* @param sampleModel The SampleModel that specifies the layout.
* @param origin The Point that specified the origin.
*/
- public BytePackedRaster(SampleModel sampleModel,
- Point origin) {
+ public BytePackedRaster(SampleModel sampleModel, Point origin) {
this(sampleModel,
- sampleModel.createDataBuffer(),
+ (DataBufferByte) sampleModel.createDataBuffer(),
new Rectangle(origin.x,
origin.y,
sampleModel.getWidth(),
@@ -108,12 +106,13 @@
* initialized and must be a DataBufferByte compatible with SampleModel.
* SampleModel must be of type MultiPixelPackedSampleModel.
* @param sampleModel The SampleModel that specifies the layout.
- * @param dataBuffer The DataBufferShort that contains the image data.
+ * @param dataBuffer The DataBufferByte that contains the image data.
* @param origin The Point that specifies the origin.
*/
public BytePackedRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Point origin) {
+ DataBufferByte dataBuffer,
+ Point origin)
+ {
this(sampleModel,
dataBuffer,
new Rectangle(origin.x,
@@ -137,7 +136,7 @@
* Note that this constructor should generally be called by other
* constructors or create methods, it should not be used directly.
* @param sampleModel The SampleModel that specifies the layout.
- * @param dataBuffer The DataBufferShort that contains the image data.
+ * @param dataBuffer The DataBufferByte that contains the image data.
* @param aRegion The Rectangle that specifies the image area.
* @param origin The Point that specifies the origin.
* @param parent The parent (if any) of this raster.
@@ -146,26 +145,22 @@
* to requirements of this Raster type.
*/
public BytePackedRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
+ DataBufferByte dataBuffer,
Rectangle aRegion,
Point origin,
- BytePackedRaster parent){
+ BytePackedRaster parent)
+ {
super(sampleModel,dataBuffer,aRegion,origin, parent);
this.maxX = minX + width;
this.maxY = minY + height;
- if (!(dataBuffer instanceof DataBufferByte)) {
- throw new RasterFormatException("BytePackedRasters must have" +
- "byte DataBuffers");
- }
- DataBufferByte dbb = (DataBufferByte)dataBuffer;
- this.data = stealData(dbb, 0);
- if (dbb.getNumBanks() != 1) {
+ this.data = stealData(dataBuffer, 0);
+ if (dataBuffer.getNumBanks() != 1) {
throw new
RasterFormatException("DataBuffer for BytePackedRasters"+
" must only have 1 bank.");
}
- int dbOffset = dbb.getOffset();
+ int dbOffset = dataBuffer.getOffset();
if (sampleModel instanceof MultiPixelPackedSampleModel) {
MultiPixelPackedSampleModel mppsm =
@@ -1322,7 +1317,7 @@
int deltaY = y0 - y;
return new BytePackedRaster(sm,
- dataBuffer,
+ (DataBufferByte) dataBuffer,
new Rectangle(x0, y0, width, height),
new Point(sampleModelTranslateX+deltaX,
sampleModelTranslateY+deltaY),
--- a/jdk/src/java.desktop/share/classes/sun/awt/image/IntegerComponentRaster.java Wed Mar 30 17:17:00 2016 +0530
+++ b/jdk/src/java.desktop/share/classes/sun/awt/image/IntegerComponentRaster.java Thu Mar 31 15:30:05 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, 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
@@ -29,7 +29,6 @@
import java.awt.image.RasterFormatException;
import java.awt.image.SampleModel;
import java.awt.image.SinglePixelPackedSampleModel;
-import java.awt.image.DataBuffer;
import java.awt.image.DataBufferInt;
import java.awt.Rectangle;
import java.awt.Point;
@@ -107,10 +106,9 @@
* @param sampleModel The SampleModel that specifies the layout.
* @param origin The Point that specified the origin.
*/
- public IntegerComponentRaster(SampleModel sampleModel,
- Point origin) {
+ public IntegerComponentRaster(SampleModel sampleModel, Point origin) {
this(sampleModel,
- sampleModel.createDataBuffer(),
+ (DataBufferInt) sampleModel.createDataBuffer(),
new Rectangle(origin.x,
origin.y,
sampleModel.getWidth(),
@@ -130,8 +128,9 @@
* @param origin The Point that specifies the origin.
*/
public IntegerComponentRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Point origin) {
+ DataBufferInt dataBuffer,
+ Point origin)
+ {
this(sampleModel,
dataBuffer,
new Rectangle(origin.x,
@@ -161,24 +160,21 @@
* @param parent The parent (if any) of this raster.
*/
public IntegerComponentRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Rectangle aRegion,
- Point origin,
- IntegerComponentRaster parent){
+ DataBufferInt dataBuffer,
+ Rectangle aRegion,
+ Point origin,
+ IntegerComponentRaster parent)
+ {
super(sampleModel,dataBuffer,aRegion,origin,parent);
this.maxX = minX + width;
this.maxY = minY + height;
- if (!(dataBuffer instanceof DataBufferInt)) {
- throw new RasterFormatException("IntegerComponentRasters must have" +
- "integer DataBuffers");
- }
- DataBufferInt dbi = (DataBufferInt)dataBuffer;
- if (dbi.getNumBanks() != 1) {
+
+ if (dataBuffer.getNumBanks() != 1) {
throw new
RasterFormatException("DataBuffer for IntegerComponentRasters"+
" must only have 1 bank.");
}
- this.data = stealData(dbi, 0);
+ this.data = stealData(dataBuffer, 0);
if (sampleModel instanceof SinglePixelPackedSampleModel) {
SinglePixelPackedSampleModel sppsm =
@@ -197,7 +193,7 @@
this.scanlineStride = sppsm.getScanlineStride();
this.pixelStride = 1;
this.dataOffsets = new int[1];
- this.dataOffsets[0] = dbi.getOffset();
+ this.dataOffsets[0] = dataBuffer.getOffset();
this.bandOffset = this.dataOffsets[0];
int xOffset = aRegion.x - origin.x;
int yOffset = aRegion.y - origin.y;
@@ -569,7 +565,7 @@
int deltaY = y0 - y;
return new IntegerComponentRaster(sm,
- dataBuffer,
+ (DataBufferInt) dataBuffer,
new Rectangle(x0,y0,width,height),
new Point(sampleModelTranslateX+deltaX,
sampleModelTranslateY+deltaY),
--- a/jdk/src/java.desktop/share/classes/sun/awt/image/IntegerInterleavedRaster.java Wed Mar 30 17:17:00 2016 +0530
+++ b/jdk/src/java.desktop/share/classes/sun/awt/image/IntegerInterleavedRaster.java Thu Mar 31 15:30:05 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -29,7 +29,6 @@
import java.awt.image.RasterFormatException;
import java.awt.image.SampleModel;
import java.awt.image.SinglePixelPackedSampleModel;
-import java.awt.image.DataBuffer;
import java.awt.image.DataBufferInt;
import java.awt.Rectangle;
import java.awt.Point;
@@ -67,10 +66,9 @@
* @param sampleModel The SampleModel that specifies the layout.
* @param origin The Point that specified the origin.
*/
- public IntegerInterleavedRaster(SampleModel sampleModel,
- Point origin) {
+ public IntegerInterleavedRaster(SampleModel sampleModel, Point origin) {
this(sampleModel,
- sampleModel.createDataBuffer(),
+ (DataBufferInt) sampleModel.createDataBuffer(),
new Rectangle(origin.x,
origin.y,
sampleModel.getWidth(),
@@ -90,8 +88,9 @@
* @param origin The Point that specifies the origin.
*/
public IntegerInterleavedRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Point origin) {
+ DataBufferInt dataBuffer,
+ Point origin)
+ {
this(sampleModel,
dataBuffer,
new Rectangle(origin.x,
@@ -121,19 +120,16 @@
* @param parent The parent (if any) of this raster.
*/
public IntegerInterleavedRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Rectangle aRegion,
- Point origin,
- IntegerInterleavedRaster parent){
+ DataBufferInt dataBuffer,
+ Rectangle aRegion,
+ Point origin,
+ IntegerInterleavedRaster parent)
+ {
super(sampleModel,dataBuffer,aRegion,origin,parent);
this.maxX = minX + width;
this.maxY = minY + height;
- if (!(dataBuffer instanceof DataBufferInt)) {
- throw new RasterFormatException("IntegerInterleavedRasters must have" +
- "integer DataBuffers");
- }
- DataBufferInt dbi = (DataBufferInt)dataBuffer;
- this.data = stealData(dbi, 0);
+
+ this.data = stealData(dataBuffer, 0);
if (sampleModel instanceof SinglePixelPackedSampleModel) {
SinglePixelPackedSampleModel sppsm =
@@ -141,7 +137,7 @@
this.scanlineStride = sppsm.getScanlineStride();
this.pixelStride = 1;
this.dataOffsets = new int[1];
- this.dataOffsets[0] = dbi.getOffset();
+ this.dataOffsets[0] = dataBuffer.getOffset();
this.bandOffset = this.dataOffsets[0];
int xOffset = aRegion.x - origin.x;
int yOffset = aRegion.y - origin.y;
@@ -481,7 +477,7 @@
int deltaY = y0 - y;
return new IntegerInterleavedRaster(sm,
- dataBuffer,
+ (DataBufferInt) dataBuffer,
new Rectangle(x0,y0,width,height),
new Point(sampleModelTranslateX+deltaX,
sampleModelTranslateY+deltaY),
--- a/jdk/src/java.desktop/share/classes/sun/awt/image/ShortBandedRaster.java Wed Mar 30 17:17:00 2016 +0530
+++ b/jdk/src/java.desktop/share/classes/sun/awt/image/ShortBandedRaster.java Thu Mar 31 15:30:05 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, 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
@@ -29,7 +29,6 @@
import java.awt.image.RasterFormatException;
import java.awt.image.SampleModel;
import java.awt.image.BandedSampleModel;
-import java.awt.image.DataBuffer;
import java.awt.image.DataBufferUShort;
import java.awt.Rectangle;
import java.awt.Point;
@@ -72,10 +71,9 @@
* @param sampleModel The SampleModel that specifies the layout.
* @param origin The Point that specified the origin.
*/
- public ShortBandedRaster(SampleModel sampleModel,
- Point origin) {
+ public ShortBandedRaster(SampleModel sampleModel, Point origin) {
this(sampleModel,
- sampleModel.createDataBuffer(),
+ (DataBufferUShort) sampleModel.createDataBuffer(),
new Rectangle(origin.x,
origin.y,
sampleModel.getWidth(),
@@ -95,8 +93,9 @@
* @param origin The Point that specifies the origin.
*/
public ShortBandedRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Point origin) {
+ DataBufferUShort dataBuffer,
+ Point origin)
+ {
this(sampleModel, dataBuffer,
new Rectangle(origin.x, origin.y,
sampleModel.getWidth(),
@@ -123,32 +122,27 @@
* @param parent The parent (if any) of this raster.
*/
public ShortBandedRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Rectangle aRegion,
- Point origin,
- ShortBandedRaster parent) {
-
+ DataBufferUShort dataBuffer,
+ Rectangle aRegion,
+ Point origin,
+ ShortBandedRaster parent)
+ {
super(sampleModel, dataBuffer, aRegion, origin, parent);
this.maxX = minX + width;
this.maxY = minY + height;
- if (!(dataBuffer instanceof DataBufferUShort)) {
- throw new RasterFormatException("ShortBandedRaster must have " +
- "ushort DataBuffers");
- }
- DataBufferUShort dbus = (DataBufferUShort)dataBuffer;
if (sampleModel instanceof BandedSampleModel) {
BandedSampleModel bsm = (BandedSampleModel)sampleModel;
this.scanlineStride = bsm.getScanlineStride();
int bankIndices[] = bsm.getBankIndices();
int bandOffsets[] = bsm.getBandOffsets();
- int dOffsets[] = dbus.getOffsets();
+ int dOffsets[] = dataBuffer.getOffsets();
dataOffsets = new int[bankIndices.length];
data = new short[bankIndices.length][];
int xOffset = aRegion.x - origin.x;
int yOffset = aRegion.y - origin.y;
for (int i = 0; i < bankIndices.length; i++) {
- data[i] = stealData(dbus, bankIndices[i]);
+ data[i] = stealData(dataBuffer, bankIndices[i]);
dataOffsets[i] = dOffsets[bankIndices[i]] +
xOffset + yOffset*scanlineStride + bandOffsets[i];
}
@@ -670,7 +664,7 @@
int deltaY = y0 - y;
return new ShortBandedRaster(sm,
- dataBuffer,
+ (DataBufferUShort) dataBuffer,
new Rectangle(x0, y0, width, height),
new Point(sampleModelTranslateX+deltaX,
sampleModelTranslateY+deltaY),
--- a/jdk/src/java.desktop/share/classes/sun/awt/image/ShortComponentRaster.java Wed Mar 30 17:17:00 2016 +0530
+++ b/jdk/src/java.desktop/share/classes/sun/awt/image/ShortComponentRaster.java Thu Mar 31 15:30:05 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1997, 2014, 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
@@ -30,7 +30,6 @@
import java.awt.image.SampleModel;
import java.awt.image.ComponentSampleModel;
import java.awt.image.SinglePixelPackedSampleModel;
-import java.awt.image.DataBuffer;
import java.awt.image.DataBufferUShort;
import java.awt.Rectangle;
import java.awt.Point;
@@ -94,7 +93,7 @@
*/
public ShortComponentRaster(SampleModel sampleModel, Point origin) {
this(sampleModel,
- sampleModel.createDataBuffer(),
+ (DataBufferUShort) sampleModel.createDataBuffer(),
new Rectangle(origin.x,
origin.y,
sampleModel.getWidth(),
@@ -115,8 +114,9 @@
* @param origin The Point that specifies the origin.
*/
public ShortComponentRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Point origin) {
+ DataBufferUShort dataBuffer,
+ Point origin)
+ {
this(sampleModel,
dataBuffer,
new Rectangle(origin.x,
@@ -146,28 +146,22 @@
* @param parent The parent (if any) of this raster.
*/
public ShortComponentRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Rectangle aRegion,
- Point origin,
- ShortComponentRaster parent) {
-
+ DataBufferUShort dataBuffer,
+ Rectangle aRegion,
+ Point origin,
+ ShortComponentRaster parent)
+ {
super(sampleModel, dataBuffer, aRegion, origin, parent);
this.maxX = minX + width;
this.maxY = minY + height;
- if(!(dataBuffer instanceof DataBufferUShort)) {
- throw new RasterFormatException("ShortComponentRasters must have "+
- "short DataBuffers");
- }
-
- DataBufferUShort dbus = (DataBufferUShort)dataBuffer;
- this.data = stealData(dbus, 0);
- if (dbus.getNumBanks() != 1) {
+ this.data = stealData(dataBuffer, 0);
+ if (dataBuffer.getNumBanks() != 1) {
throw new
RasterFormatException("DataBuffer for ShortComponentRasters"+
" must only have 1 bank.");
}
- int dbOffset = dbus.getOffset();
+ int dbOffset = dataBuffer.getOffset();
if (sampleModel instanceof ComponentSampleModel) {
ComponentSampleModel csm = (ComponentSampleModel)sampleModel;
@@ -758,7 +752,7 @@
int deltaY = y0 - y;
return new ShortComponentRaster(sm,
- dataBuffer,
+ (DataBufferUShort) dataBuffer,
new Rectangle(x0, y0, width, height),
new Point(sampleModelTranslateX+deltaX,
sampleModelTranslateY+deltaY),
--- a/jdk/src/java.desktop/share/classes/sun/awt/image/ShortInterleavedRaster.java Wed Mar 30 17:17:00 2016 +0530
+++ b/jdk/src/java.desktop/share/classes/sun/awt/image/ShortInterleavedRaster.java Thu Mar 31 15:30:05 2016 +0530
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 1998, 2014, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1998, 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
@@ -31,7 +31,6 @@
import java.awt.image.ComponentSampleModel;
import java.awt.image.PixelInterleavedSampleModel;
import java.awt.image.SinglePixelPackedSampleModel;
-import java.awt.image.DataBuffer;
import java.awt.image.DataBufferUShort;
import java.awt.Rectangle;
import java.awt.Point;
@@ -71,7 +70,7 @@
*/
public ShortInterleavedRaster(SampleModel sampleModel, Point origin) {
this(sampleModel,
- sampleModel.createDataBuffer(),
+ (DataBufferUShort) sampleModel.createDataBuffer(),
new Rectangle(origin.x,
origin.y,
sampleModel.getWidth(),
@@ -92,8 +91,9 @@
* @param origin The Point that specifies the origin.
*/
public ShortInterleavedRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Point origin) {
+ DataBufferUShort dataBuffer,
+ Point origin)
+ {
this(sampleModel,
dataBuffer,
new Rectangle(origin.x,
@@ -123,22 +123,17 @@
* @param parent The parent (if any) of this raster.
*/
public ShortInterleavedRaster(SampleModel sampleModel,
- DataBuffer dataBuffer,
- Rectangle aRegion,
- Point origin,
- ShortInterleavedRaster parent) {
+ DataBufferUShort dataBuffer,
+ Rectangle aRegion,
+ Point origin,
+ ShortInterleavedRaster parent)
+ {
super(sampleModel, dataBuffer, aRegion, origin, parent);
this.maxX = minX + width;
this.maxY = minY + height;
- if(!(dataBuffer instanceof DataBufferUShort)) {
- throw new RasterFormatException("ShortInterleavedRasters must "+
- "have ushort DataBuffers");
- }
-
- DataBufferUShort dbus = (DataBufferUShort)dataBuffer;
- this.data = stealData(dbus, 0);
+ this.data = stealData(dataBuffer, 0);
// REMIND: need case for interleaved ComponentSampleModel
if ((sampleModel instanceof PixelInterleavedSampleModel) ||
@@ -160,7 +155,7 @@
this.scanlineStride = sppsm.getScanlineStride();
this.pixelStride = 1;
this.dataOffsets = new int[1];
- this.dataOffsets[0] = dbus.getOffset();
+ this.dataOffsets[0] = dataBuffer.getOffset();
int xOffset = aRegion.x - origin.x;
int yOffset = aRegion.y - origin.y;
dataOffsets[0] += xOffset+yOffset*scanlineStride;
@@ -730,7 +725,7 @@
int deltaY = y0 - y;
return new ShortInterleavedRaster(sm,
- dataBuffer,
+ (DataBufferUShort) dataBuffer,
new Rectangle(x0, y0, width, height),
new Point(sampleModelTranslateX+deltaX,
sampleModelTranslateY+deltaY),
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/jdk/test/java/awt/image/RasterCreationTest.java Thu Mar 31 15:30:05 2016 +0530
@@ -0,0 +1,352 @@
+/*
+ * Copyright (c) 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.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+import java.awt.Point;
+import java.awt.image.DataBuffer;
+import java.awt.image.DataBufferByte;
+import java.awt.image.DataBufferDouble;
+import java.awt.image.DataBufferFloat;
+import java.awt.image.DataBufferInt;
+import java.awt.image.DataBufferShort;
+import java.awt.image.DataBufferUShort;
+import java.awt.image.Raster;
+import java.awt.image.SampleModel;
+import java.awt.image.MultiPixelPackedSampleModel;
+import java.awt.image.PixelInterleavedSampleModel;
+import java.awt.image.SinglePixelPackedSampleModel;
+
+/*
+ * @test
+ * @bug 6353518
+ * @summary Test possible combinations of Raster creation
+ * Test fails if any of Raster.createXXX() method throws exception.
+ */
+public class RasterCreationTest {
+
+ public static void main(String[] args) {
+
+ final int width = 10;
+ final int height = 5;
+ final int imageSize = width * height;
+ Point location = new Point(0, 0);
+ int[] bandOffsets = {0};
+ int[] bitMask = {0x00ff0000, 0x0000ff00, 0xff, 0x0};
+
+ SampleModel[] inputSampleModels = {
+ new PixelInterleavedSampleModel(DataBuffer.TYPE_BYTE,
+ 1, 1, 1, 1, bandOffsets),
+ new PixelInterleavedSampleModel(DataBuffer.TYPE_USHORT,
+ 1, 1, 1, 1, bandOffsets),
+ new PixelInterleavedSampleModel(DataBuffer.TYPE_INT,
+ 1, 1, 1, 1, bandOffsets),
+ new SinglePixelPackedSampleModel(DataBuffer.TYPE_BYTE,
+ width, height, bitMask),
+ new SinglePixelPackedSampleModel(DataBuffer.TYPE_USHORT,
+ width, height, bitMask),
+ new SinglePixelPackedSampleModel(DataBuffer.TYPE_INT,
+ width, height, bitMask),
+ new MultiPixelPackedSampleModel(DataBuffer.TYPE_BYTE,
+ width, height, 4),
+ new MultiPixelPackedSampleModel(DataBuffer.TYPE_USHORT,
+ width, height, 2),
+ new MultiPixelPackedSampleModel(DataBuffer.TYPE_INT,
+ width, height, 2)
+ };
+
+ // ---------------------------------------------------------------------
+ // Test ability to create Raster & WritableRaster with DataBuffer
+ // classes
+ // ---------------------------------------------------------------------
+ DataBuffer[] inputDataBuffer = {
+ new DataBufferByte(imageSize),
+ new DataBufferUShort(imageSize),
+ new DataBufferInt(imageSize, 1),
+ new DataBufferShort(imageSize),
+ new DataBufferFloat(imageSize),
+ new DataBufferDouble(imageSize)
+ };
+
+ for (SampleModel sm : inputSampleModels) {
+ for (DataBuffer db : inputDataBuffer) {
+ // Test Raster creation
+ Raster.createRaster(sm, db, location);
+
+ // Test writableRaster creation
+ Raster.createWritableRaster(sm, db, location);
+ Raster.createWritableRaster(sm, location);
+ }
+ }
+
+ // ---------------------------------------------------------------------
+ // Test ability to create Raster & WritableRaster with custom DataBuffer
+ // classes
+ // ---------------------------------------------------------------------
+ DataBuffer[] myDataBuffer = {
+ new MyDataBufferByte(imageSize),
+ new MyDataBufferUShort(imageSize),
+ new MyDataBufferInt(imageSize),
+ new MyDataBufferShort(imageSize),
+ new MyDataBufferDouble(imageSize),
+ new MyDataBufferFloat(imageSize)
+ };
+
+ for (SampleModel sm : inputSampleModels) {
+ for (DataBuffer db : myDataBuffer) {
+ // Test Raster creation
+ Raster.createRaster(sm, db, location);
+
+ // Test writableRaster creation
+ Raster.createWritableRaster(sm, db, location);
+ Raster.createWritableRaster(sm, location);
+ }
+ }
+
+ // ---------------------------------------------------------------------
+ // Test ability to create InterleavedRaster
+ // ---------------------------------------------------------------------
+ int[] interleavedInputDataTypes = {
+ DataBuffer.TYPE_BYTE,
+ DataBuffer.TYPE_USHORT
+ };
+
+ int numBands = 1;
+
+ for (int i : interleavedInputDataTypes) {
+ Raster.createInterleavedRaster(i, width, height, 1, location);
+ Raster.createInterleavedRaster(i, width, height, width * numBands,
+ numBands, bandOffsets, location);
+ }
+
+ for (int i = 0; i < interleavedInputDataTypes.length ; i++) {
+ DataBuffer d1 = inputDataBuffer[i];
+ DataBuffer d2 = myDataBuffer[i];
+
+ Raster.createInterleavedRaster(d1, width, height, width * numBands,
+ numBands, bandOffsets, location);
+ Raster.createInterleavedRaster(d2, width, height, width * numBands,
+ numBands, bandOffsets, location);
+ }
+
+ // ---------------------------------------------------------------------
+ // Test ability to create BandedRaster
+ // ---------------------------------------------------------------------
+ int[] bankIndices = new int[numBands];
+ bankIndices[0] = 0;
+
+ int[] bandedInputDataTypes = {
+ DataBuffer.TYPE_BYTE,
+ DataBuffer.TYPE_USHORT,
+ DataBuffer.TYPE_INT
+ };
+
+ for (int i : bandedInputDataTypes) {
+ Raster.createBandedRaster(i, width, height, 1, location);
+ Raster.createBandedRaster(i, width, height, width,
+ bankIndices, bandOffsets, location);
+ }
+
+ for (int i = 0; i < bandedInputDataTypes.length; i++) {
+ DataBuffer d1 = inputDataBuffer[i];
+ DataBuffer d2 = myDataBuffer[i];
+
+ Raster.createBandedRaster(d1, width, height, width,
+ bankIndices, bandOffsets, location);
+ Raster.createBandedRaster(d2, width, height, width,
+ bankIndices, bandOffsets, location);
+ }
+
+ // ---------------------------------------------------------------------
+ // Test ability to create PackedRaster
+ // ---------------------------------------------------------------------
+ int[] bandMasks = new int[numBands];
+ bandMasks[0] = 0;
+
+ int packedInputDataTypes[] = {
+ DataBuffer.TYPE_BYTE,
+ DataBuffer.TYPE_USHORT,
+ DataBuffer.TYPE_INT
+ };
+
+ for (int i : packedInputDataTypes) {
+ Raster.createPackedRaster(i, width, height, bandMasks, location);
+
+ for (int bits = 1; bits < 5; bits *= 2) {
+ Raster.createPackedRaster(i, width, height, 1, bits, location);
+ }
+ }
+
+ for (int i = 0; i < packedInputDataTypes.length; i++) {
+ DataBuffer d1 = inputDataBuffer[i];
+ DataBuffer d2 = myDataBuffer[i];
+
+ for (int bits = 1; bits < 5; bits *= 2) {
+ Raster.createPackedRaster(d1, width, height, bits, location);
+ Raster.createPackedRaster(d2, width, height, bits, location);
+ }
+
+ Raster.createPackedRaster(d1, width, height, 1,bandMasks, location);
+ Raster.createPackedRaster(d2, width, height, 1,bandMasks, location);
+ }
+ }
+}
+
+// ---------------------------------------------------------------------
+// Custom DataBuffer classes for testing purpose
+// ---------------------------------------------------------------------
+final class MyDataBufferByte extends DataBuffer {
+
+ byte[] data;
+ byte[][] bankdata;
+
+ public MyDataBufferByte(int size) {
+ super(TYPE_BYTE, size);
+ data = new byte[size];
+ bankdata = new byte[1][];
+ bankdata[0] = data;
+ }
+
+ @Override
+ public int getElem(int bank, int i) {
+ return bankdata[bank][i + offsets[bank]];
+ }
+
+ @Override
+ public void setElem(int bank, int i, int val) {
+ bankdata[bank][i + offsets[bank]] = (byte) val;
+ }
+}
+
+final class MyDataBufferDouble extends DataBuffer {
+
+ double[] data;
+ double[][] bankdata;
+
+ public MyDataBufferDouble(int size) {
+ super(TYPE_DOUBLE, size);
+ data = new double[size];
+ bankdata = new double[1][];
+ bankdata[0] = data;
+ }
+
+ @Override
+ public int getElem(int bank, int i) {
+ return (int) bankdata[bank][i + offsets[bank]];
+ }
+
+ @Override
+ public void setElem(int bank, int i, int val) {
+ bankdata[bank][i + offsets[bank]] = (double) val;
+ }
+}
+
+final class MyDataBufferFloat extends DataBuffer {
+
+ float[] data;
+ float[][] bankdata;
+
+ public MyDataBufferFloat(int size) {
+ super(TYPE_FLOAT, size);
+ data = new float[size];
+ bankdata = new float[1][];
+ bankdata[0] = data;
+ }
+
+ @Override
+ public int getElem(int bank, int i) {
+ return (int) bankdata[bank][i + offsets[bank]];
+ }
+
+ @Override
+ public void setElem(int bank, int i, int val) {
+ bankdata[bank][i + offsets[bank]] = (float) val;
+ }
+}
+
+final class MyDataBufferShort extends DataBuffer {
+
+ short[] data;
+ short[][] bankdata;
+
+ public MyDataBufferShort(int size) {
+ super(TYPE_SHORT, size);
+ data = new short[size];
+ bankdata = new short[1][];
+ bankdata[0] = data;
+ }
+
+ @Override
+ public int getElem(int bank, int i) {
+ return bankdata[bank][i + offsets[bank]];
+ }
+
+ @Override
+ public void setElem(int bank, int i, int val) {
+ bankdata[bank][i + offsets[bank]] = (short) val;
+ }
+}
+
+final class MyDataBufferUShort extends DataBuffer {
+
+ short[] data;
+ short[][] bankdata;
+
+ public MyDataBufferUShort(int size) {
+ super(TYPE_USHORT, size);
+ data = new short[size];
+ bankdata = new short[1][];
+ bankdata[0] = data;
+ }
+
+ @Override
+ public int getElem(int bank, int i) {
+ return bankdata[bank][i + offsets[bank]];
+ }
+
+ @Override
+ public void setElem(int bank, int i, int val) {
+ bankdata[bank][i + offsets[bank]] = (short) val;
+ }
+}
+
+final class MyDataBufferInt extends DataBuffer {
+
+ int[] data;
+ int[][] bankdata;
+
+ public MyDataBufferInt(int size) {
+ super(TYPE_INT, size);
+ data = new int[size];
+ bankdata = new int[1][];
+ bankdata[0] = data;
+ }
+
+ @Override
+ public int getElem(int bank, int i) {
+ return bankdata[bank][i + offsets[bank]];
+ }
+
+ @Override
+ public void setElem(int bank, int i, int val) {
+ bankdata[bank][i + offsets[bank]] = (int) val;
+ }
+}