【问题标题】:Save int[][] of RGB as image file将 RGB 的 int[][] 保存为图像文件
【发布时间】:2014-06-30 18:20:30
【问题描述】:

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

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

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

【问题讨论】:

  • 如果在创建图像时使用适当的图像类型常量,可以创建 BufferedImage 以使用 int 数组或字节数组。我从未通过 ImageIO 直接读取数组,而是从 BufferedImage 的光栅数据缓冲区中获取或放入数组。请注意,我不是这样做的专业人士,因此请谨慎对待此信息。
  • 如果您担心数据丢失,为什么要使用像 jpeg 这样的有损压缩?

标签: java image rgb bufferedimage


【解决方案1】:

即使除了int[][]byte[] 的问题之外,您的表达式ImageIO.read(new 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]);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-12
    相关资源
    最近更新 更多