Come scrivere file PNG in java utilizzando i valori RGB dei pixel da 0 a 1?
-
27-10-2019 - |
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
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);