Normand Briere
2019-09-24 767be784dc7fe293bf5c5ee6507df242526be3ed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 
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;
    }
}