in common/src/main/java/org/apache/sedona/common/raster/RasterConstructorsForTesting.java [127:241]
private static WritableRaster createRasterWithSampleModel(
String sampleModelType,
String bandDataType,
int widthInPixel,
int heightInPixel,
int numBand) {
int dataType = RasterUtils.getDataTypeCode(bandDataType);
// Create raster according to sample model type
WritableRaster raster;
switch (sampleModelType) {
case "BandedSampleModel":
raster =
RasterFactory.createBandedRaster(dataType, widthInPixel, heightInPixel, numBand, null);
break;
case "PixelInterleavedSampleModel":
{
int scanlineStride = widthInPixel * numBand;
int[] bandOffsets = new int[numBand];
for (int i = 0; i < numBand; i++) {
bandOffsets[i] = i;
}
SampleModel sm =
new PixelInterleavedSampleModel(
dataType, widthInPixel, heightInPixel, numBand, scanlineStride, bandOffsets);
raster = RasterFactory.createWritableRaster(sm, null);
break;
}
case "PixelInterleavedSampleModelComplex":
{
int pixelStride = numBand + 2;
int scanlineStride = widthInPixel * pixelStride + 5;
int[] bandOffsets = new int[numBand];
for (int i = 0; i < numBand; i++) {
bandOffsets[i] = i;
}
ArrayUtils.shuffle(bandOffsets);
SampleModel sm =
new PixelInterleavedSampleModel(
dataType, widthInPixel, heightInPixel, pixelStride, scanlineStride, bandOffsets);
raster = RasterFactory.createWritableRaster(sm, null);
break;
}
case "ComponentSampleModel":
{
int pixelStride = numBand + 1;
int scanlineStride = widthInPixel * pixelStride + 5;
int[] bankIndices = new int[numBand];
for (int i = 0; i < numBand; i++) {
bankIndices[i] = i;
}
ArrayUtils.shuffle(bankIndices);
int[] bandOffsets = new int[numBand];
for (int i = 0; i < numBand; i++) {
bandOffsets[i] = (int) (Math.random() * widthInPixel);
}
SampleModel sm =
new ComponentSampleModel(
dataType,
widthInPixel,
heightInPixel,
pixelStride,
scanlineStride,
bankIndices,
bandOffsets);
raster = RasterFactory.createWritableRaster(sm, null);
break;
}
case "SinglePixelPackedSampleModel":
{
if (dataType != DataBuffer.TYPE_INT) {
throw new IllegalArgumentException(
"only supports creating SinglePixelPackedSampleModel with int data type");
}
if (numBand != 4) {
throw new IllegalArgumentException(
"only supports creating SinglePixelPackedSampleModel with 4 bands");
}
int bitsPerBand = 4;
int scanlineStride = widthInPixel + 5;
int[] bitMasks = new int[numBand];
int baseMask = (1 << bitsPerBand) - 1;
for (int i = 0; i < numBand; i++) {
bitMasks[i] = baseMask << (i * bitsPerBand);
}
SampleModel sm =
new SinglePixelPackedSampleModel(
dataType, widthInPixel, heightInPixel, scanlineStride, bitMasks);
raster = RasterFactory.createWritableRaster(sm, null);
break;
}
case "MultiPixelPackedSampleModel":
{
if (dataType != DataBuffer.TYPE_BYTE) {
throw new IllegalArgumentException(
"only supports creating MultiPixelPackedSampleModel with byte data type");
}
if (numBand != 1) {
throw new IllegalArgumentException(
"only supports creating MultiPixelPackedSampleModel with 1 band");
}
int numberOfBits = 4;
int scanlineStride = widthInPixel * numberOfBits / 8 + 2;
SampleModel sm =
new MultiPixelPackedSampleModel(
dataType, widthInPixel, heightInPixel, numberOfBits, scanlineStride, 80);
raster = RasterFactory.createWritableRaster(sm, null);
break;
}
default:
throw new IllegalArgumentException("Unknown sample model type: " + sampleModelType);
}
return raster;
}