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

3

我正在使用Java编写一个光线追踪器,并尝试弄清如何将生成的图像写入PNG文件。到目前为止,我找到的所有示例都演示了使用BufferedImage创建PNG,但它们都使用0到255的RGB值。在我的代码中,我表示每个像素颜色值介于0和1之间,例如品红色是(1, 0, 1)。我应该如何以这样的值编写PNG?

谢谢

2个回答

4

如果你将0到1之间的值乘以255,你会得到0到255之间的数字。

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

import javax.imageio.ImageIO;

// ...

BufferedImage image = ...;

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

1
请记得将结果四舍五入为整数。 - stmi

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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接