Domanda

Sto scrivendo un ray tracer in java e sto cercando di capire come scrivere la mia immagine generata in un file PNG.Finora, tutti gli esempi che ho trovato dimostrano l'uso di BufferedImage per creare un PNG, ma usano tutti i valori RGB da 0 a 255. Nel mio codice rappresento ogni valore di colore del pixel tra 0 e 1, quindi per esempio il magenta è (1, 0, 1).Come posso scrivere un PNG con tali valori?

Grazie

È stato utile?

Soluzione

Se moltiplichi il tuo valore tra 0 e 1 per 255, otterrai un numero compreso tra 0 e 255.

Nota: scrivere un BufferedImage in un file PNG è molto semplice con l'API ImageIO, è solo una riga di codice:

import javax.imageio.ImageIO;

// ...

BufferedImage image = ...;

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

Altri suggerimenti

Puoi creare un BufferedImage personalizzato che memorizza i suoi dati pixel come float[].

Tuttavia, non lo consiglio, perché alcune delle funzioni API della piattaforma eseguiranno in modo errato la conversione dello spazio colore quando non è necessaria (ad esempio, quando l'origine e la destinazione sono entrambe sRGB).

Esempio:

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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top