Как записать файлы PNG в Java с использованием значений RGB пикселей от 0 до 1?

Я пишу трассировщик лучей на java, и я пытаюсь понять, как записать сгенерированное изображение в файл PNG. Пока что все примеры, которые я нашел, демонстрируют использование BufferedImage для создания PNG, но все они используют значения RGB от 0 до 255. В моем коде я представляю значение цвета каждого пикселя между 0 и 1, поэтому, например, пурпурный цвет равен (1 , 0, 1). Как я могу написать PNG с такими значениями?

Спасибо


person user283188    schedule 30.01.2011    source источник


Ответы (2)


Если вы умножите свое значение от 0 до 1 на 255, вы получите число от 0 до 255.

Примечание. Записать BufferedImage в файл PNG с помощью ImageIO API очень просто, это всего лишь одна строка кода:

import javax.imageio.ImageIO;

// ...

BufferedImage image = ...;

ImageIO.write(image, "png", new File("output.png"));
person Jesper    schedule 30.01.2011
comment
также не забудьте округлить до целого числа. - person stmi; 31.01.2011

Вы можете создать собственный BufferedImage, в котором будут храниться данные о пикселях a 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);
person finnw    schedule 30.01.2011