Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.
Cómo guardar una imagen en PNG o JPEG
Propósito. Persistir una Image en disco. CrossFly ofrece dos niveles: conveniencia
(guarda un archivo con nombre por timestamp y devuelve la ruta) y control total (tú proporcionas el
OutputStream).
Conveniencia (guarda el archivo automáticamente)
String toPng(String... prefix)— guarda un PNG con nombre<prefix><timestamp>.png. En escritorio graba enDevice.homeFolder; en móvil graba en/sdcard/. Devuelve la ruta guardada, onullen caso de error (el error se trata internamente víaDebug.handle). Elprefixes opcional.String toJpg(int... quality)— guarda un JPEG con nombre por timestamp.qualityes opcional (por defecto90);100= sin compresión,85= buena compresión,60= gran compresión pero con ruido. Devuelve la ruta, onullen caso de error.
Control total (tú proporcionas el stream)
void toPng(OutputStream s) throws ImageException, IOException— graba el PNG en el stream. El PNG es de 24 BPP, o 32 BPP si la imagen tiene canal alfa.void toJpg(OutputStream s, int quality) throws ImageException, IOException— graba el JPEG en el stream con la calidad dada (0–100). El stream se cierra en la llamada.
Atención a las sobrecargas:
toPng(String...)/toJpg(int...)guardan un archivo y se tragan las excepciones (devuelvennull). En cambiotoPng(OutputStream)/toJpg(OutputStream,int)propaganImageException/IOException. Elige según quieras o no tratar el error.
Ejemplo completo (copiar, pegar y ejecutar)
package com.exemplo;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import dev.crossfly.ui.*; // Window
import dev.crossfly.ui.layout.*; // VerticalLayout
import dev.crossfly.ui.image.*; // Image, ImageException
import dev.crossfly.util.*; // Debug
/** Pantalla principal ejecutable. Apunta el launcher (classname) y corre: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
try {
Image img = new Image("/sdcard/foto.jpg"); // tu imagen ya cargada o generada
// 1) Conveniencia: archivo con timestamp; devuelve la ruta
String pngPath = img.toPng("thumb_"); // ej.: .../thumb_20260706153000.png
String jpgPath = img.toJpg(85); // calidad 85
Debug.log("PNG: " + pngPath + " | JPG: " + jpgPath);
// 2) Control total: tú decides el destino y manejas errores
try (OutputStream out = new FileOutputStream("/sdcard/saida.png")) {
img.toPng(out); // el stream lo cierra la llamada; propaga excepciones
} catch (ImageException | IOException e) {
// maneja fallo de escritura/codificación
}
} catch (ImageException | IOException e) {
// fallo al cargar la imagen de origen
}
}
}
El fragmento de abajo muestra solo el núcleo. Para ejecutarlo, colócalo en el esqueleto
MainWindowde arriba.
Fragmento mínimo
// verificado en la fuente: Image.java toPng/toJpg — líneas 800, 811, 1454, 1479
import dev.crossfly.ui.image.*; // Image, ImageException
Image img = /* tu imagen ya cargada o generada */;
// 1) Conveniencia: archivo con timestamp; devuelve la ruta
String pngPath = img.toPng("thumb_"); // ej.: .../thumb_20260706153000.png
String jpgPath = img.toJpg(85); // calidad 85
// 2) Control total: tú decides el destino y manejas errores
try (java.io.OutputStream out = new java.io.FileOutputStream("/sdcard/saida.png")) {
img.toPng(out); // el stream lo cierra la llamada; propaga excepciones
} catch (ImageException | java.io.IOException e) {
// maneja fallo de escritura/codificación
}
Profundiza
- Receta hermana: thumbnail.md — genera el thumbnail y luego guárdalo con esta receta.
- Receta hermana: screenshot.md — captura la pantalla y guárdala con
toPng().
¿Te resultó útil esta página?¡Gracias por tu opinión!