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

如何使用像素RGB值0到1在java中编写PNG文件?,java,png,image-manipulation,rgb,bufferedimage,Java,Png,Image Manipulation,Rgb,Bufferedimage,我正在用java编写一个光线跟踪器,并试图找出如何将生成的图像写入PNG文件。到目前为止,我找到的所有示例都演示了如何使用BuffereImage创建PNG,但它们都使用RGB值0到255。在我的代码中,我表示0和1之间的每个像素颜色值,例如,洋红是(1,0,1)。我怎样才能用这样的值编写PNG呢 谢谢如果将0和1之间的值乘以255,将得到一个介于0和255之间的数字 注意:使用ImageIO API将BuffereImage写入PNG文件非常简单,只需一行代码: import javax.im

我正在用java编写一个光线跟踪器,并试图找出如何将生成的图像写入PNG文件。到目前为止,我找到的所有示例都演示了如何使用BuffereImage创建PNG,但它们都使用RGB值0到255。在我的代码中,我表示0和1之间的每个像素颜色值,例如,洋红是(1,0,1)。我怎样才能用这样的值编写PNG呢


谢谢

如果将0和1之间的值乘以255,将得到一个介于0和255之间的数字

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

import javax.imageio.ImageIO;

// ...

BufferedImage image = ...;

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

您可以创建一个自定义的
buffereImage
,将其像素数据存储为
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);

还记得四舍五入到整数。