我目前有一个简单的int []数组,其灰度值为0 ... 255.我想将值保存到一个简单的图像文件中。我做了以下事情:
// 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,但它仍然非常暗,但你至少可以看到我认为应该是白色的轮廓:
有谁知道为什么?
答案 0 :(得分:2)
我相信使用WritableRaster
会有更好的运气:
BufferedImage outputImage = new BufferedImage(w, h, BufferedImage.TYPE_BYTE_GRAY);
WritableRaster raster = outputImage.getRaster();
raster.setSamples(0, 0, w, h, 0, result);
ImageIO.write(outputImage, INPUT_FILETYPE, new File(getOutputFileSystemString()));
答案 1 :(得分:1)
您可以使用WritableRaster(忘记getRGB,这是访问像素的最糟糕方式):
int[] myarray = ...
WritableRaster wr = image.getRaster() ;
for (int y=0, nb=0 ; y < image.getHeight() ; y++)
for (int x=0 ; x < image.getWidth() ; x++, nb++)
wr.setSample(x, y, 0, myarray[nb]) ;
使用DataBuffer会更快,但是你必须处理图像编码。