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; } }