我使用此代码将位数组转换为bufferedimage,但给出了错误
ByteArrayInputStream bais = new ByteArrayInputStream(arr);
BufferedImage finale=new BufferedImage(img.getWidth(), img.getHeight(), BufferedImage.TYPE_3BYTE_BGR);
finale=ImageIO.read(bais);
File outputfile = new File("C:\\Users\\Divya Prakash\\Desktop\\image32.jpg");
ImageIO.write(finale, "jpg", outputfile);
错误
Exception in thread "main" java.lang.IllegalArgumentException: image == null!
at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925)
at javax.imageio.ImageIO.getWriter(ImageIO.java:1592)
at javax.imageio.ImageIO.write(ImageIO.java:1520)
at imgpros.Imgpros.main(Imgpros.java:113)
Java Result: 1
如何清除错误?
最佳答案
正如一条评论所示,ImageIO可能无法读取ByteInputStream
。或者,可能您的数组无法转换为ByteInputStream
。因此,这将返回null。尝试:
System.out.println(bais==null);
如果显示
true
,则可以:a)寻找另一种将数组转换为
BufferedImage
的方法为此,我建议为您的
BufferedImage
定义宽度和高度:finale=new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
然后,用数组中的点填充它:
for (int x = 0 ; x < width ; x=x+1) {
for (int y = 0 ; y < height ; y=y+1) {
finale.setRGB(x,y,arr[y*w+x]);
}
}
如果它是一个int数组...
b)检查ImageIO是否可以处理您的
ByteInputStream
。试试这个:
InputStream bais = new ByteArrayInputStream(arr);
希望对您有帮助!