Frage

Ich schreibe einen Ray Tracer in Java und versuche herauszufinden, wie ich mein generiertes Bild in eine PNG-Datei schreibe.Bisher zeigen alle Beispiele, die ich gefunden habe, die Verwendung von BufferedImage zum Erstellen eines PNG, aber alle verwenden RGB-Werte von 0 bis 255. In meinem Code stelle ich jeden Pixelfarbwert zwischen 0 und 1 dar, also ist beispielsweise Magenta (1), 0, 1).Wie kann ich ein PNG mit solchen Werten schreiben?

Danke

War es hilfreich?

Lösung

Wenn Sie Ihren Wert zwischen 0 und 1 mit 255 multiplizieren, erhalten Sie eine Zahl zwischen 0 und 255.

Hinweis: Das Schreiben eines BufferedImages in eine PNG-Datei ist mit der ImageIO-API sehr einfach. Es ist nur eine Codezeile:

import javax.imageio.ImageIO;

// ...

BufferedImage image = ...;

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

Andere Tipps

Sie können einen benutzerdefinierten BufferedImage erstellen, in dem die Pixeldaten als float[] gespeichert werden.

Ich empfehle es jedoch nicht, da einige der Plattform-API-Funktionen die Farbraumkonvertierung falsch durchführen, wenn dies nicht erforderlich ist (z. B. wenn Quelle und Ziel beide sRGB sind).

Beispiel:

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top