BufferedImage.getRGB()方法的异常,合并两个图片报错异常

异常报错

1.

java.lang.ArrayIndexOutOfBoundsException: Coordinate out of bounds!
    at sun.awt.image.ByteInterleavedRaster.getDataElements(ByteInterleavedRaster.java:318)
    at java.awt.image.BufferedImage.getRGB(BufferedImage.java:986)
    at base64image.ImageSpell.composeImage(ImageSpell.java:26)
    at base64image.PandaDiary.main(PandaDiary.java:50)

java使用BufferedImage.getRGB()方法合并两个图片的时候,使用这个方法

bufferedImage.getRGB(0,0,width,height,ImageArrayTwo,0,width);
主要的一段源码是这里的,api上面是这样的
public int[] getRGB(int startX, int startY, int w, int h,
                        int[] rgbArray, int offset, int scansize) {
        int yoff  = offset;
        int off;
        Object data;
        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));
            }
        }

        return rgbArray;
    }

第一个图片getRGB没有问题,是因为填写的是自己的宽度和高度,但是在获取第二个图片的时候,写了第一个图片的高度、长度,所以导致获取不到报数组异常。这时候把getRGB的宽度、高度参数写成自己的正确参数就行了。

2.

java.lang.ArrayIndexOutOfBoundsException: 10000
    at java.awt.image.BufferedImage.getRGB(BufferedImage.java:986)
    at base64image.ImageSpell.composeImage(ImageSpell.java:26)
    at base64image.PandaDiary.main(PandaDiary.java:50)

这个异常跟第一个一样,都是数组索引超出界限,导致获取不到数而抛出的异常。

public int[] getRGB(int startX, int startY, int w, int h,
                        int[] rgbArray, int offset, int scansize)

scansize一般写图片的宽度就可以了。如果这个宽度写的,比原图片的宽度宽或窄,就会出现这个异常。

还得保证setRGB()这个方法时,把图片的宽和高都写对。

总结:这个图片的错误都是宽度和高度,写多或写少了,仔细检查第一个和第二个图片参数是不是自己的。

猜你喜欢

转载自blog.csdn.net/mint6/article/details/80377702