Pregunta

Estoy escribiendo un trazador de rayos en java y estoy tratando de averiguar cómo escribir mi imagen generada a un archivo PNG.Hasta ahora, todos los ejemplos que he encontrado demostrar el uso de BufferedImage para crear un PNG, pero todos ellos utilizan valores RGB de 0 a 255.En mi código me representar cada píxel de color con un valor entre 0 y 1, de modo que, por ejemplo, el magenta es de (1, 0, 1).Cómo se puede ir sobre la escritura de un PNG con esos valores?

Gracias

¿Fue útil?

Solución

Si se multiplica su valor entre 0 y 1 con 255, usted obtendrá un número entre 0 y 255.

Nota:La escritura de un BufferedImage a un archivo PNG es muy fácil con el ImageIO API, es sólo una línea de código:

import javax.imageio.ImageIO;

// ...

BufferedImage image = ...;

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

Otros consejos

Puede crear una personalizada BufferedImage que almacena los datos de los píxeles de una float[].

No lo recomiendo a pesar de que, debido a que algunos de la plataforma de las funciones de la API de forma incorrecta realizar la conversión de espacio de color cuando no es necesario (por ejemplo,cuando la fuente y el destino son sRGB.)

Ejemplo:

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top