Java exception“线程中的异常”main“Java.lang.ClassCastException:[B在调用Java.awt.image.BuffereImage.copyData()时不能强制转换为[I”)
在下面的代码中,我尝试将一些1024*1024 png组合成几个更大的png。代码失败,出现以下异常:
Exception in thread "main" java.lang.ClassCastException: [B cannot be cast to [I
at sun.awt.image.IntegerInterleavedRaster.setDataElements(Unknown Source)
at java.awt.image.BufferedImage.copyData(Unknown Source)
at mloc.bs12.mapimagemerger.Merger.main(Merger.java:27)
我可能忽略了一些小而愚蠢的东西,但我找不到代码有任何错误。 代码:
import java.awt.image.*;
import javax.imageio.*;
import java.io.*;
public class Merger {
public static void main(String[] args) {
String toX, toY, toZ;
try {
toX = args[0];
toY = args[1];
toZ = args[2];
} catch(ArrayIndexOutOfBoundsException E) {
//E.printStackTrace();
toX = "3";
toY = "5";
toZ = "4";
}
int yproper = 1;
for(int z = 1; z <= Integer.parseInt(toZ); z++) {
BufferedImage img = new BufferedImage(Integer.parseInt(toX) * 1024, Integer.parseInt(toY) * 1024, BufferedImage.TYPE_INT_RGB);
for(int x = 1; x <= Integer.parseInt(toX); x++) {
for(int y = 1; y <= Integer.parseInt(toY); y++) {
BufferedImage simg = img.getSubimage(x*1024, y*1024, 1024, 1024);
BufferedImage tempimg = loadImage(x + "-" + y + "-" + z + ".png");
WritableRaster rsimg = simg.getRaster();
rsimg = tempimg.copyData(rsimg); <-- Error!
yproper++;
}
}
saveImage(img, z + ".png");
}
}
public static BufferedImage loadImage(String path) {
BufferedImage bimg = null;
try {
bimg = ImageIO.read(new File(path));
} catch (Exception e) {
e.printStackTrace();
}
return bimg;
}
public static void saveImage(BufferedImage img, String path) {
try {
ImageIO.write(img, "png", new File(path));
} catch (Exception e) {
e.printStackTrace();
}
return;
}
}
我想我现在已经弄明白了。 我加载的图像与我创建的图像类型不同。(我还不知道他们是什么类型,13型是什么?) 我还有一些问题,但此错误已修复。 (更多问题,如this。)
# 1 楼答案
该库将字节数组强制转换为int数组,这是您无法做到的
我不熟悉BuffereImage,但有一种猜测是,您读入的PNG文件被视为字节值,而不是整数值