Java 将RGB的int[]]另存为图像文件

Java 将RGB的int[]]另存为图像文件,java,image,rgb,bufferedimage,Java,Image,Rgb,Bufferedimage,我有图像的RBG值的数组int[]],我需要将其存储到jpg文件中。我尝试这样做: BufferedImage image = ImageIO.read(new ByteArrayInputStream(result)); ImageIO.write(image, "jpg", new File("/path/", "snap.jpg")); 但是我有一个int[]而不是byte[]数组。如何将int[][]转换为byte[]而不丢失值?即使撇开int[]][/code>与byte[]的问

我有图像的RBG值的数组int[]],我需要将其存储到jpg文件中。我尝试这样做:

 BufferedImage image = ImageIO.read(new ByteArrayInputStream(result));
 ImageIO.write(image, "jpg", new File("/path/", "snap.jpg"));

但是我有一个int[]而不是byte[]数组。如何将int[][]转换为byte[]而不丢失值?

即使撇开
int[]][/code>与
byte[]
的问题不谈,您的表达式
ImageIO.read(新的ByteArrayInputStream(result))
没有真正意义,因为它期望
result
是图像文件的内容(不仅仅是像素值,而是一些公认图像文件格式的所有标题、填充等)

我想你想要的是:

final int height = result.length;
final int width = result[0].length;
final BufferedImage image =
    new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int y = 0; y < height; ++y) {
    for (int x = 0; x < width; ++x) {
        bufferedImage.setRGB(x, y, result[y][x]);
    }
}
final int height=result.length;
最终整型宽度=结果[0]。长度;
最终缓冲区图像=
新的BuffereImage(宽度、高度、BuffereImage.TYPE_INT_RGB);
对于(int y=0;y
即使除了
int[][]
byte[]
的问题之外,您的表达式
ImageIO.read(新的ByteArrayInputStream(result))
没有真正意义,因为它期望
result
是图像文件的内容(不仅仅是像素值,而是一些公认图像文件格式的所有标题、填充等)

我想你想要的是:

final int height = result.length;
final int width = result[0].length;
final BufferedImage image =
    new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
for (int y = 0; y < height; ++y) {
    for (int x = 0; x < width; ++x) {
        bufferedImage.setRGB(x, y, result[y][x]);
    }
}
final int height=result.length;
最终整型宽度=结果[0]。长度;
最终缓冲区图像=
新的BuffereImage(宽度、高度、BuffereImage.TYPE_INT_RGB);
对于(int y=0;y
如果在创建图像时使用适当的图像类型常量,则可以创建一个BuffereImage以使用int数组或字节数组。我从未通过ImageIO直接读取阵列,但从缓冲区中获取阵列或将阵列放入缓冲区图像的光栅数据缓冲区。请注意,我不擅长这样做,因此请对此信息持保留态度。如果您担心数据丢失,为什么要使用jpeg之类的有损压缩?如果在创建图像时使用适当的图像类型常量,则可以创建可能的BuffereImage副本,以使用int数组或字节数组。我从未通过ImageIO直接读取阵列,但从缓冲区中获取阵列或将阵列放入缓冲区图像的光栅数据缓冲区。请注意,我不擅长这样做,因此请对这些信息持保留态度。如果您担心数据丢失,为什么要使用jpeg之类的有损压缩?可能是重复的