我写在Java中的光线追踪,我试图找出如何我生成的图像写入PNG文件。到目前为止,我已发现了所有的实施例展示了使用BufferedImage的创建一个PNG,但它们都使用RGB值0到255。在我的代码表示0和1之间的每个像素的颜色值,因此,例如品红色是(1 ,0,1)。我该如何去写一个带有这些值的PNG?如何使用像素RGB值0至1在java中编写PNG文件?
感谢
我写在Java中的光线追踪,我试图找出如何我生成的图像写入PNG文件。到目前为止,我已发现了所有的实施例展示了使用BufferedImage的创建一个PNG,但它们都使用RGB值0到255。在我的代码表示0和1之间的每个像素的颜色值,因此,例如品红色是(1 ,0,1)。我该如何去写一个带有这些值的PNG?如何使用像素RGB值0至1在java中编写PNG文件?
感谢
如果乘以0和1与255之间的你的价值,你会得到0和255之间
注意一个数字:写BufferedImage
为PNG文件很容易与ImageIO的API,这只是一行代码:
import javax.imageio.ImageIO;
// ...
BufferedImage image = ...;
ImageIO.write(image, "png", new File("output.png"));
您可以创建自定义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);
还记得四舍五入到整数。 – stmi 2011-01-30 21:32:25