2011-01-30 82 views
3

我写在Java中的光线追踪,我试图找出如何我生成的图像写入PNG文件。到目前为止,我已发现了所有的实施例展示了使用BufferedImage的创建一个PNG,但它们都使用RGB值0到255。在我的代码表示0和1之间的每个像素的颜色值,因此,例如品红色是(1 ,0,1)。我该如何去写一个带有这些值的PNG?如何使用像素RGB值0至1在java中编写PNG文件?

感谢

回答

4

如果乘以0和1与255之间的你的价值,你会得到0和255之间

注意一个数字:写BufferedImage为PNG文件很容易与ImageIO的API,这只是一行代码:

import javax.imageio.ImageIO; 

// ... 

BufferedImage image = ...; 

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

还记得四舍五入到整数。 – stmi 2011-01-30 21:32:25

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); 
相关问题