Domingo 22 de Diciembre de 2024, 19:13
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Java
(Moderador:
arielb
) »
Superponer Dos Imágenes
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Superponer Dos Imágenes (Leído 5460 veces)
AURED
Miembro activo
Mensajes: 60
Superponer Dos Imágenes
«
en:
Martes 14 de Noviembre de 2006, 18:14 »
0
Hola a todos,
Hace una infinidad de tiempo que no pasaba por este foro.
Tengo una duda:
¿es posible superponer dos imágenes en JAVA?
Me explico tengo una imagen que quiero que funcione como fondo y a la que colocarle una imagen transparente de modo que se superpongan ambas imágenes. En concreto se trata de un mapa al que quiero colocarle símbolos meteorológicos. Tengo el mapa por un lado y la imagen con los símbolos por otro.
¿Como se podría hacer? si alguien puede darme alguna indicación acerca de que clase o clases utilizar o de donde podría recoger información se lo agradecería.
Saludos
Tweet
"Es mejor saber después de haber pensado y discutido que aceptar los saberes que nadie discute para no tener que pensar"
silverfox
Miembro MUY activo
Mensajes: 280
Re: Superponer Dos Imágenes
«
Respuesta #1 en:
Miércoles 15 de Noviembre de 2006, 09:22 »
0
Hola...
Claro que se puede.
Echa un vistazo a la clase BufferedImage. Necesitarás una imágen que tenga canal alpha (transparencia), o bien, ponerla tú a mano.
De todas formas... si te fijas en los mapas del tiempo, los signos que aparecen no son transparentes.
Un saludo.
Silverfox
AURED
Miembro activo
Mensajes: 60
Re: Superponer Dos Imágenes
«
Respuesta #2 en:
Miércoles 29 de Noviembre de 2006, 10:51 »
0
Ya conseguí superponer dos imágenes pero no funciona muy bien que digamos. Me explico:
Tengo un boton que me dibuja la imagen (con las dos superpuestas). El fondo lo selecciono con un JComboBox y la imagen que se dibuja encima del fondo se selecciona (todo esto lo hago previamente a dibujar la imagen). El código que tengo es algo así:
Código: Text
public void pintar(){
bufIm=new BufferedImage(600,600,BufferedImage.TYPE_INT_ARGB);
Graphics2D gbi = bufIm.createGraphics();
gbi.drawImage(fondo,0,0,null);
AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER);
gbi.setComposite(ac);
gbi.drawImage(capa,0,0,null);
ImageIcon ic=new ImageIcon(bufIm);
muestra.setIcon(ic);
}
private void cambiarFondo(){
fondo=Toolkit.getDefaultToolkit().getImage(regiones.getSelectedItem()+".jpg");
}
private void cargarDatos(){
FileDialog fd=new FileDialog(this);
fd.setTitle("Seleccionar imagen a cargar");
fd.show();
if(fd.getFile()!=null){
String origen=fd.getDirectory()+fd.getFile();
capa=Toolkit.getDefaultToolkit().getImage(origen);
}
}
El botón es el encargado de llamar al método pintar() una vez el fondo y la capa superficial han sido seleccionados. El problema es que necesito hacer dos clicks al botón para que me dibuje la imagen actualizada. A la primera no la dibuja. ¿Tenéis alguna idea de por qué es esto así?
"Es mejor saber después de haber pensado y discutido que aceptar los saberes que nadie discute para no tener que pensar"
AURED
Miembro activo
Mensajes: 60
Re: Superponer Dos Imágenes
«
Respuesta #3 en:
Miércoles 29 de Noviembre de 2006, 12:35 »
0
¿Es posible que la imagen no se haya cargado?¿Debo emplear un MediaTracker?
"Es mejor saber después de haber pensado y discutido que aceptar los saberes que nadie discute para no tener que pensar"
silverfox
Miembro MUY activo
Mensajes: 280
Re: Superponer Dos Imágenes
«
Respuesta #4 en:
Viernes 1 de Diciembre de 2006, 07:56 »
0
Hola...
Puede deberse a que la imágen no ha terminado de cargarse, o también puede deberse a que no se refresca apropiadamente el componente cuando la pintas.
Para solucionarlo, trata de usar las clases de observación de imágenes a ver si es la primera, y reliza un update para ver si es la segunda.
Espero que lo soluciones.
Un saludo.
Silverfox
AURED
Miembro activo
Mensajes: 60
Re: Superponer Dos Imágenes
«
Respuesta #5 en:
Viernes 1 de Diciembre de 2006, 11:01 »
0
Solucionado.
Empleando el MediaTracker funciona perfectamente.
El código queda algo así, lo cuelgo por si a alguien le pudiese ser de utilidad.
Código: Text
public void pintar(){
bufIm=new BufferedImage(600,600,BufferedImage.TYPE_INT_ARGB);
Graphics2D gbi = bufIm.createGraphics();
gbi.drawImage(fondo,0,0,null);
AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC_OVER);
gbi.setComposite(ac);
gbi.drawImage(capa,0,0,null);
ImageIcon ic=new ImageIcon(bufIm);
muestra.setIcon(ic);
}
private void cambiarFondo(){
fondo=Toolkit.getDefaultToolkit().getImage(regiones.getSelectedItem()+".jpg");
MediaTracker tracker=new MediaTracker(this);
tracker.addImage(fondo,1);
try{
if(!tracker.waitForID(1,10000)){
System.out.println("Load error.");
System.exit(1);
}
}catch(Exception e){
e.printStackTrace();
System.exit(1);
}
if((tracker.statusAll(false)&MediaTracker.ERRORED& MediaTracker.ABORTED) != 0){
System.out.println("Load errored or aborted");
System.exit(1);
}
}
private void cargarDatos(){
FileDialog fd=new FileDialog(this);
fd.setTitle("Seleccionar imagen a cargar");
fd.show();
if(fd.getFile()!=null){
String origen=fd.getDirectory()+fd.getFile();
capa=Toolkit.getDefaultToolkit().getImage(origen);
MediaTracker tracker=new MediaTracker(this);
tracker.addImage(capa,1);
try{
if(!tracker.waitForID(1,10000)){
System.out.println("Load error.");
System.exit(1);
}
}catch(Exception e){
e.printStackTrace();
System.exit(1);
}
if((tracker.statusAll(false)&MediaTracker.ERRORED& MediaTracker.ABORTED) != 0){
System.out.println("Load errored or aborted");
System.exit(1);
}
}
}
"Es mejor saber después de haber pensado y discutido que aceptar los saberes que nadie discute para no tener que pensar"
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Java
(Moderador:
arielb
) »
Superponer Dos Imágenes