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

Était-ce utile?

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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top