【问题标题】:How to convert double array to image in Java ro save as image?如何在Java中将双数组转换为图像以另存为图像?
【发布时间】:2021-06-26 02:16:06
【问题描述】:

我有一个双值数组(或者也可以是浮点值)。值的范围在 0-255 之间。该数组的形状为 [128][128][3],因此是一个 RGB 图像数组。现在我想将此数组保存为图像(png 或 jpg)。这在 Java 中如何实现?

【问题讨论】:

  • 看看这个答案stackoverflow.com/a/28671344 - 你必须将双打转换为字节......
  • 或者提供更多控制权的方式 - stackoverflow.com/a/4845770
  • 我检查了他们,但他们没有回答我的问题。在这里,我已经有一个带有浮点值的数组。数组的形状是[128][128][3]。 3 表示图像的通道(红色、绿色和蓝色)。值范围从 0 到 255。我想知道是否有内置函数或更简单的方法可以将数组转换为图像?
  • 第二个答案给出了线索​​.. 请参阅 [WritableRaster javadoc] (docs.oracle.com/javase/7/docs/api/java/awt/image/…) - 或 setPixels,它可以让您将区域设置为您的值。似乎没有“从您的数组中执行”(除非您可以使其与 SampleModels 之一一起使用,就像在上一个答案中一样 stackoverflow.com/a/15005373

标签: java arrays image image-processing


【解决方案1】:

好的,我终于可以理解Java中的图像了。

拥有int[][][] nwimage = new int[128][128][3] 的数组后,将浮点数组中的所有值转换为整数。 float 数组的形状也是 [128][128][3]。

现在创建一个形状为nwimage 的2D 缓冲图像,即128x128。

BufferedImage bfImage = new BufferedImage(128, 128, BufferedImage.TYPE_INT_RGB);

现在为bfImage 的每个索引设置RGB,如下所示;

  for(int i = 0; i < 128; i++) {
        for(int j = 0; j < 128; j++) {
            Color myRGB = new Color(nwimage[i][j][0], nwimage[i][j][1], nwimage[i][j][2]);
            int rgb = myRGB.getRGB();
            bfImage.setRGB(i, j, rgb);
        }
    }

【讨论】:

  • 也可以从float 参数创建新的Colors,因此您无需先将数组转换为整数。但无论如何,您最终都会得到一个基于整数的图像。基于浮点/双精度的BufferedImages 也是可能的。 ?
  • 感谢您的意见。发布答案后我想通了。再次感谢您在答案中添加注释。
猜你喜欢
  • 2013-08-01
  • 2022-01-03
  • 2011-03-07
  • 1970-01-01
  • 1970-01-01
  • 2018-07-21
  • 2021-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多