Ver Mensaje Individual
  #3 (permalink)  
Antiguo 26/05/2012, 13:50
Avatar de fahs82
fahs82
 
Fecha de Ingreso: abril-2012
Ubicación: guadalajara
Mensajes: 139
Antigüedad: 12 años
Puntos: 12
Respuesta: Orientacion sobre cargar imagen de campo blob en jpane

gracias liloo , debido a que no podia entender o adaptar el codigo a el jpane tuve que adaptarlo a un jlabel

posteo el codigo por si a alguien le sirve tambien , ojo al obtener la imagen esta no se redimensiona por lo cual no se adaptara al jlabel , pero eso lo solucione con otro codigo que pondre al final
declaro estos dos valores globales
Image data;
String Id;


primero llamo a la funcion cargar imagen en el evento click de mi data grid pasando el valor al string id que tengo declarado en global a uno , ahy mismo recibo el return de la imagen y establesco el icon resultante a mi jlabel

Id = "1";
Image dtCat = CargarImagen();
Icon icon = new ImageIcon(dtCat);
lblImagen.setIcon(icon);

a continuacion pongo las funciones necesarias
public Image CargarImagen(){
ConexionMySQL Mysql = new ConexionMySQL();
Connection cn = Mysql.Conectar();
try{
PreparedStatement pstImagen = cn.prepareStatement("Select IMAGEN as IMAGEN from IMAGENESART where ID ='" + Id + "'");
ResultSet rsImagen = pstImagen.executeQuery();
int i = 0;
while(rsImagen.next()){
byte[] b = rsImagen.getBytes("IMAGEN");
data = ConvertirImagen(b);
i++;
}
rsImagen.close();
}
catch(IOException IOex){
JOptionPane.showMessageDialog(null,IOex);
}
catch(SQLException ex){
JOptionPane.showMessageDialog(null,ex);
}
return data;
}

en estas hago una consulta a la base de datos y a traves del resultset obtengo el campo blob en bytes y paso el arreglo a una imagen declarada como data que pasa a la funcion convertirimagen

public Image ConvertirImagen(byte[] bytes)throws IOException{
ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
Iterator readers = ImageIO.getImageReadersByFormatName("jpeg");
ImageReader reader = (ImageReader) readers.next();
Object source = bis; // File or InputStream
ImageInputStream iis = ImageIO.createImageInputStream(source);
reader.setInput(iis, true);
ImageReadParam param = reader.getDefaultReadParam();
return reader.read(0, param);


}
y el resultado retorna y prosigue a establecer la imagen en el jlabel , listoooo

ahora si quieren redimensionar la imagen del jlabel a la medida paso el siguiente codigo sustituyendo esto
Id = "1";
Image dtCat = CargarImagen();
Icon icon = new ImageIcon(dtCat);
lblImagen.setIcon(icon);
por esto
Id = "1";
Image dtCat = CargarImagen();
Icon icon = new ImageIcon(dtCat);
Image img = icon.getImage();
Image newimg = img.getScaledInstance(291,226,java.awt.Image.SCALE _SMOOTH);
ImageIcon newIcon = new ImageIcon(newimg);
lblImagen.setIcon(newIcon);

esto me retorna la imagen escalada en una dimension de 291 x 226 . las medidas pueden ser ajustadas a la necesidad del jlabel suerte y espero le sea de ayuda a alguien mas , se agradece karma x cierto jaja salu2