Thread View: es.comp.lenguajes.java
2 messages
2 total messages
Started by Jorge S. de Lis
Thu, 28 Dec 2006 00:24
¿Obtener un byte[] desde un ImageIcon?
Author: Jorge S. de Lis
Date: Thu, 28 Dec 2006 00:24
Date: Thu, 28 Dec 2006 00:24
25 lines
1987 bytes
1987 bytes
Buenas. Tengo una imagen (ImageIcon) creada desde un array de bytes (byte[]) que provienen de una consulta SQL. Dado que necesito volver a guardarla en una base de datos, necesito obtener de nuevo el byte[] (y a partir de ah� convertirlo a hexadecimal, pero eso lo tengo resuelto). No s� hacer eso, as� que se me ocurri� crear una clase que contenga el ImageIcon con un �nico constructor que reciba un byte[] y lo almacene para luego poder recuperarlo de nuevo directamente. Todo muy bonito, pero ahora intento leer un Icon desde un JLabel, lo convierto a Image, hago un cast a ImageIcon, y... ��vaya, el mismo problema de antes!! No puedo obtener el byte[] ;( Esa soluci�n no sirve entonces. Necesito un m�todo para convertir un ImageIcon en un byte[] a narices. Estuve googleando [1] pero no me solucion� demasiado. [1] http://forum.java.sun.com/thread.jspa?threadID=510343&messageID=2424112 Gracias, cualquier consejo ser� bienvenido.
Re: ¿Obtener un byte[] desde un ImageIcon?
Author: Fede
Date: Thu, 11 Jan 2007 20:31
Date: Thu, 11 Jan 2007 20:31
119 lines
4767 bytes
4767 bytes
Hola... esta clase administra imagenes e iconos.... fijate los metodos
"crearImagen" y "bytesDesdeInputStream" quizas te sirvan de inspiracion
para resolver tu problema....
el segundo metodo mencionado anteriormente codifica un InputStream en
un byte[] y luego a partir de este arreglo construyo
las imagenes utilizando la libreria "java.awt.Toolkit". Se que no es
una solucion exacta de tu problema pero espero te sirva de algo.
Suerte. Federico
--------------------------------------------------------------------------------------------------------
/*
* @(#)ImgAdmin.java
*/
import java.util.HashMap;
import javax.swing.ImageIcon;
import java.awt.Image;
import java.awt.MediaTracker;
import java.io.IOException;
/**
* Administrador deimagenes.
*
*/
public class ImgAdmin {
/** Guarda instancias de los iconos que se estan utilizando. */
private static HashMap iconos = new HashMap();
/** Guarda instancias de las imagenes que se estan utilizando. */
private static HashMap imagenes = new HashMap();
/** El mobre del directorio base donde estan las imagenes. */
private static final String DIR_BASE = "recursos/";
/** La extension de todas las imagenes. */
private static final String EXTENSION = ".png";
/**
* Constructor.
*/
public ImgAdmin(){
}
/**
* Devuelve un icono.
*
* @param NOMBRE Es el nombre del archivo de imagen que se
* utiliza para crear el icono, se asume que
* el formato del archivo es PNG.
**/
public static ImageIcon crearIcono(String NOMBRE) {
String url = DIR_BASE+NOMBRE+EXTENSION;
ImageIcon i = (ImageIcon) iconos.get(url);
if(i != null) return i;
i = new ImageIcon(url);
if (i.getImageLoadStatus()==MediaTracker.COMPLETE){
iconos.put(url, i);
}else{
System.out.println("Error cargando el archivo "+url);
}
return i;
}
/**
* Devuelve una imagen.
* @param NOMBRE Es el nombre del archivo que se
* utiliza para crear la imagen, se
* asume que el formato del archivo
* es PNG.
*/
public Image crearImagen(String NOMBRE) {
String url = DIR_BASE+NOMBRE+EXTENSION;
Image i = (Image) imagenes.get(url);
if(i != null) return i;
try {
ClassLoader cl = this.getClass().getClassLoader();
java.io.InputStream in = cl.getResourceAsStream(url);
byte[] data = bytesDesdeInputStream(in, in.available());
i = java.awt.Toolkit.getDefaultToolkit().createImage(data);
imagenes.put(url, i);
return i;
} catch (Exception ex){
ex.getMessage();
ex.printStackTrace();
}
return null;
}
/**
* Codifica un archivo de imagen en
* un arreglo de bytes, el archivo
* de imagen debe estar en alguno de
* los formatos soportados por
* java.awt.Toolkit, como ser GIF
* JPEG o PNG.
*/
private static byte[] bytesDesdeInputStream(java.io.InputStream in,
int length){
java.io.DataInputStream din = new java.io.DataInputStream(in);
byte[] bytecodes = new byte[length];
try {
din.readFully(bytecodes);
if (din != null) din.close();
}catch (IOException ex){
ex.getMessage();
ex.printStackTrace();
}
return bytecodes;
}
}
--------------------------------------------------------------------------------------------------------
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads