🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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?
#614
Author: Jorge S. de Lis
Date: Thu, 28 Dec 2006 00:24
25 lines
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?
#639
Author: Fede
Date: Thu, 11 Jan 2007 20:31
119 lines
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