如何使用0到1的像素RGB值在java中编写PNG文件?

时间:2011-01-30 21:27:45

标签: java png image-manipulation rgb bufferedimage

我正在用java编写光线跟踪器,我正在试图弄清楚如何将生成的图像写入PNG文件。到目前为止,我发现的所有示例都演示了使用BufferedImage创建PNG,但它们都使用0到255的RGB值。在我的代码中,我表示0到1之间的每个像素颜色值,因此例如品红色是(1 ,0,1)。我怎样才能编写具有这些值的PNG?

由于

2 个答案:

答案 0 :(得分:4)

如果将0到1之间的值乘以255,则会得到0到25​​5之间的数字。

注意:使用ImageIO API将BufferedImage写入PNG文件非常简单,只需一行代码:

import javax.imageio.ImageIO;

// ...

BufferedImage image = ...;

ImageIO.write(image, "png", new File("output.png"));

答案 1 :(得分:0)

您可以创建一个自定义BufferedImage,将其像素数据存储为float[]

我不推荐它,因为某些平台API函数在不需要时会错误地执行颜色空间转换(例如,当源和目标都是sRGB时)。

示例:

ColorModel cm =
    new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
                            false, false, Transparency.OPAQUE,
                            DataBuffer.TYPE_FLOAT);
WritableRaster raster = cm.createCompatibleWritableRaster(width, height);
BufferedImage img = new BufferedImage(cm, raster, false, null);