异常报错
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);
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()这个方法时,把图片的宽和高都写对。
总结:这个图片的错误都是宽度和高度,写多或写少了,仔细检查第一个和第二个图片参数是不是自己的。