Java:将灰度int数组保存到图像

时间:2016-06-01 15:11:10

标签: java image

我目前有一个简单的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,但它仍然非常暗,但你至少可以看到我认为应该是白色的轮廓:

http://i.imgur.com/nkiy2Hv.png

有谁知道为什么?

2 个答案:

答案 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会更快,但是你必须处理图像编码。