2010-01-26 14 views
10

Tengo una representación de matriz de bytes de una imagen. Cómo guardarlo en el disco como un archivo de imagen.Cómo almacenar una matriz de bytes como un archivo de imagen en el disco?

ya he hecho esto

OutputStream out = new FileOutputStream("a.jpg"); 
out.write(byteArray); 
out.flush(); 
out.close(); 

Pero cuando abro la imagen haciendo doble clic en él, que no muestra ninguna imagen.

+0

¿Quiere escribirlo como PNG o JPG o simplemente para poder volver a leerlo en algún momento? –

+0

¿tiene el tipo de matriz que puede pasar a image.setRGB? –

+1

¿De dónde sacaste el byte []? Necesitas saber qué formato tiene (JPEG, GIF, PNG, BMP ...) – Thilo

Respuesta

7

Aparte de no utilizar a/por último bloque try (al menos en el código que has mostrado) que debe estar bien. (No es necesario para eliminar un flujo de salida si está cerrando, por cierto.)

Como no está funcionando, eso sugiere byteArray no lo hace realidad contienen una imagen codificada-JPEG. ¿Cómo se creó byteArray para empezar? Si se trata de una representación "cruda", es probable que desee codificarla, p. utilizando el paquete javax.imageio.

+5

+1 para "No necesita enjuagar un flujo de salida si es ...." –

+0

También podría mirar http: // stackoverflow. com/questions/2132657/java-swing-architecture-problem/2132670 # 2132670 ................. En realidad, todos me sugirieron usar la arquitectura MVC de swing ... pero yo no quiero esa respuesta ... ya lo sé ... quiero una sugerencia o un ejemplo de swing que tenga su código GUI dividido en varios archivos ... para que pueda resolver mi propio problema ... busqué mucho en google pero no pude obtener ningún ejemplo ... –

7

usted podría utilizar la clase FileOutputStream:

FileOutputStream fos = new FileOutputStream("image.jpg"); 
try { 
    fos.write(someByteArray); 
} 
finally { 
    fos.close(); 
} 
3

Puede usar ImageIO API.

Los detalles pueden ser un poco peludos, pero primero es probable que desee crear una Imagen Buffered utilizando el tipo TYPE_BYTE_INDEXED y alguna instancia adecuada de IndexColorModel. Luego coloca tu matriz de bytes allí. Sugerencia: se puede obtener la representación interna de BufferedImage con:

myDataBuffer = myBufferedImage.getRaster().getDataBuffer(); 

que probablemente devolverá un búfer de datos de tipo DataBufferByte (¡bien!), Desde donde se obtiene una matriz de bytes con

myByteArray = ((DataBufferByte) myDataBuffer).getData(); 

Entonces puede usar System.arraycopy para copiar su matriz de bytes en eso.

Cuestiones relacionadas