Как записать PNG-файлы в Java, используя пиксельные значения RGB от 0 до 1? - PullRequest
3 голосов
/ 31 января 2011

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

Спасибо

Ответы [ 2 ]

4 голосов
/ 31 января 2011

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

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

import javax.imageio.ImageIO;

// ...

BufferedImage image = ...;

ImageIO.write(image, "png", new File("output.png"));
0 голосов
/ 31 января 2011

Вы можете создать пользовательский 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);
...