Comment écrire des fichiers PNG en Java en utilisant les valeurs RVB de 0 à 1 pixel?
-
27-10-2019 - |
Question
Je suis en train d'écrire un traceur de rayons en java et je suis en train de comprendre comment écrire mon image générée dans un fichier PNG. Jusqu'à présent, tous les exemples que j'ai trouvé démontrent l'utilisation de BufferedImage pour créer un PNG, mais ils utilisent tous les valeurs RVB 0 à 255. Dans mon code que je représente chaque valeur de couleur de pixel entre 0 et 1, donc par exemple le magenta est (1 , 0, 1). Comment puis-je aller à écrire un PNG avec ces valeurs?
Merci
La solution
Si vous multipliez votre valeur entre 0 et 1 avec 255, vous obtiendrez un nombre compris entre 0 et 255.
Remarque: L'écriture d'un BufferedImage
dans un fichier PNG est très facile avec l'API ImageIO, il est juste une ligne de code:
import javax.imageio.ImageIO;
// ...
BufferedImage image = ...;
ImageIO.write(image, "png", new File("output.png"));
Autres conseils
Vous pouvez créer un BufferedImage
personnalisé qui stocke ses données de pixel un float[]
.
Je ne recommande pas bien, parce que certaines des fonctions de l'API de plate-forme de manière incorrecte effectuer la conversion de l'espace de couleur quand il est pas nécessaire (par exemple lorsque la source et la destination sont sRGB.)
Exemple:
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);