【发布时间】:2016-06-05 14:15:23
【问题描述】:
我目前有一个从 0 ... 255 的灰度值的简单 int[] 数组。我想将这些值保存到一个简单的图像文件中。我执行以下操作:
// flatten the 2d array
int[] result = Arrays.stream(imgData)
.flatMapToInt(Arrays::stream)
.toArray();
BufferedImage outputImage = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_GRAY);
outputImage.setRGB(0, 0, w, h, result, 0, w);
ImageIO.write(outputImage, INPUT_FILETYPE, new File(getOutputFileSystemString()));
这实际上效果很好,但是图像很暗,比我认为的要暗。
这是 IrfanView 中的输出图像。你实际上可以看到细节,它不是全黑的,而是极其黑暗的。我将左上角的每个像素都设置为 255,但它仍然非常暗,但你至少可以看到我认为应该是白色的轮廓:
有人知道为什么吗?
【问题讨论】:
-
imgData 的类型是什么?二维 int[]?
-
@ManoDestra 是的。它包含从 0 到 255 的 int 值,大小正好是 int[1024][1024]。
-
您创建了一个名为
result的数组,但随后在函数调用中使用了source -
啊,是的,这实际上是我的复制错误,因为我正在测试将原始灰度图像放入数组中,但结果仍然相同。很黑...应该是
result,我编辑了。 -
如果您使用的是 Java 8,那么您不妨看看 ColorAdjust 类。