|
import java.awt.image.*;
|
|
public class cBufferedImage extends BufferedImage
|
{
|
public cBufferedImage(int width,
|
int height,
|
int imageType)
|
{
|
super(width,height,imageType);
|
}
|
|
public int[] getRGB(int startX, int startY, int w, int h,
|
int[] rgbArray, int offset, int scansize) {
|
int yoff = offset;
|
int off;
|
Object data;
|
Raster raster = getTile(0,0);
|
int nbands = raster.getNumBands();
|
int dataType = raster.getDataBuffer().getDataType();
|
switch (dataType) {
|
case DataBuffer.TYPE_BYTE:
|
data = new byte[nbands];
|
break;
|
case DataBuffer.TYPE_USHORT:
|
data = new short[nbands];
|
break;
|
case DataBuffer.TYPE_INT:
|
data = new int[nbands];
|
break;
|
case DataBuffer.TYPE_FLOAT:
|
data = new float[nbands];
|
break;
|
case DataBuffer.TYPE_DOUBLE:
|
data = new double[nbands];
|
break;
|
default:
|
throw new IllegalArgumentException("Unknown data buffer type: "+
|
dataType);
|
}
|
|
if (rgbArray == null) {
|
rgbArray = new int[offset+h*scansize];
|
}
|
|
/*
|
for (int y = startY; y < startY+h; y++, yoff+=scansize)
|
{
|
off = yoff;
|
for (int x = startX; x < startX+w; x++)
|
{
|
//rgbArray[off++] = colorModel.getRGB(raster.getDataElements(x, y, data));
|
rgbArray[off++] = ((int[])(raster.getDataElements(x, y, data)))[0];
|
}
|
}
|
*/
|
|
System.arraycopy(((sun.awt.image.IntegerInterleavedRaster)raster).getDataStorage(), 0, rgbArray, 0, h*scansize);
|
|
return rgbArray;
|
}
|
}
|