Java - 将 byte[] 保存到图像文件中
Java - Saving byte[] into an image file
此 post 是以下内容的跟进:
与 OP 类似,每当我尝试从我的 ByteArrayInputStream 中读取时,我都会得到一个空指针(正如最佳答案所解释的那样)。注意到这一点,我已经实现了上面 post 中@haraldK 的答案中的代码以更正此问题,但我将 运行 变成了另一个问题。我有以下代码:
byte[] imageInByteArr = ...
// convert byte array back to BufferedImage
int width = 1085;
int height = 696;
BufferedImage convertedGrayScale = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
convertedGrayScale.getRaster().setDataElements(0, 0, width, height, imageInByteArr );
try {
ImageIO.write(convertedGrayScale, "jpg", new File("C:\test.jpg"));
}
catch (IOException e) {
System.err.println("IOException: " + e);
}
执行后,我 运行 在 try/catch 块之前的行中出现 java.lang.ArrayIndexOutOfBoundsException: null
错误。我的第一个想法是这个空指针是由于我的 C 驱动器中没有名为 test.jpg
的文件而产生的。我进行了调整以解决这个问题,但我仍然在 convertedGrayScale.getRaster().setDataElements(0, 0, width, height, imageInByteArr );
遇到相同的空指针问题。为什么会这样?
另一方面,除了使用 ImageIO 编写文件外,还有其他方法可以将 byte[] 转换为图像的可视化表示吗?我试图将数组打印到文件中并将其另存为“.jpg”,但文件无法打开。任何建议都会有所帮助。总而言之,我希望将 byte[] 转换为图像并将其保存或呈现到浏览器上。以 easier/doable 为准。
您的 imageInByteArr
似乎太短了。我能够得到与您从中得到的相同的错误
public static void main(String[] args) {
int width = 1085;
int height = 696;
byte[] imageInByteArr = new byte[width ];
BufferedImage convertedGrayScale = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
convertedGrayScale.getRaster().setDataElements(0, 0, width, height, imageInByteArr);
}
当使用 width*height
的大小 imageInByteArr
或更大的任何东西时,我没有收到任何错误,但是当它小于您尝试更新的数据时,它会抛出异常。
此 post 是以下内容的跟进:
与 OP 类似,每当我尝试从我的 ByteArrayInputStream 中读取时,我都会得到一个空指针(正如最佳答案所解释的那样)。注意到这一点,我已经实现了上面 post 中@haraldK 的答案中的代码以更正此问题,但我将 运行 变成了另一个问题。我有以下代码:
byte[] imageInByteArr = ...
// convert byte array back to BufferedImage
int width = 1085;
int height = 696;
BufferedImage convertedGrayScale = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
convertedGrayScale.getRaster().setDataElements(0, 0, width, height, imageInByteArr );
try {
ImageIO.write(convertedGrayScale, "jpg", new File("C:\test.jpg"));
}
catch (IOException e) {
System.err.println("IOException: " + e);
}
执行后,我 运行 在 try/catch 块之前的行中出现 java.lang.ArrayIndexOutOfBoundsException: null
错误。我的第一个想法是这个空指针是由于我的 C 驱动器中没有名为 test.jpg
的文件而产生的。我进行了调整以解决这个问题,但我仍然在 convertedGrayScale.getRaster().setDataElements(0, 0, width, height, imageInByteArr );
遇到相同的空指针问题。为什么会这样?
另一方面,除了使用 ImageIO 编写文件外,还有其他方法可以将 byte[] 转换为图像的可视化表示吗?我试图将数组打印到文件中并将其另存为“.jpg”,但文件无法打开。任何建议都会有所帮助。总而言之,我希望将 byte[] 转换为图像并将其保存或呈现到浏览器上。以 easier/doable 为准。
您的 imageInByteArr
似乎太短了。我能够得到与您从中得到的相同的错误
public static void main(String[] args) {
int width = 1085;
int height = 696;
byte[] imageInByteArr = new byte[width ];
BufferedImage convertedGrayScale = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
convertedGrayScale.getRaster().setDataElements(0, 0, width, height, imageInByteArr);
}
当使用 width*height
的大小 imageInByteArr
或更大的任何东西时,我没有收到任何错误,但是当它小于您尝试更新的数据时,它会抛出异常。