Foros del Web » Programación para mayores de 30 ;) » Java »

Botón deshacer gráfico

Estas en el tema de Botón deshacer gráfico en el foro de Java en Foros del Web. Hola a todos, tengo un applet al estilo paint y estoy intentando deshacer el último dibujo pintado sobre una imagen (BufferedImage) mediante un botón. He ...
  #1 (permalink)  
Antiguo 15/03/2006, 05:58
msi
 
Fecha de Ingreso: marzo-2005
Mensajes: 70
Antigüedad: 19 años, 2 meses
Puntos: 0
Botón deshacer gráfico

Hola a todos, tengo un applet al estilo paint y estoy intentando deshacer el último dibujo pintado sobre una imagen (BufferedImage) mediante un botón. He leido algo sobre guardar la imagen actual antes de dibujar cualquier cosa y si se pulsa el botón deshacer, que restaure la imagen anterior.

No encuentro ejemplos ni logro hacerlo funcionar así que recurro a este foro. La parte principal de mi código es:


Código PHP:

Pintar
(){
....
imageBuffer ImageIO.read(new URL(getCodeBase()+"mediocampoataque.jpg"));
grafico imageBuffer.getGraphics();
...
}

public 
void paintComponent(Graphics g){
       
g.drawImage(imageBuffer00this);
}


public 
void mousePressed(MouseEvent evt) {

undoBuffer imageBuffer.getSubimage(0,0,imageBuffer.getWidth(),imageBuffer.getHeight());
....
}


public 
void actionPerformed(ActionEvent evt){

if (
command.equals("Deshacer")){
imageBuffer undoBuffer.getSubimage(0,0,undoBuffer.getWidth(),undoBuffer.getHeight());
repaint();    

Seguro que no está bien (porque no me funciona) pero no logro averiguar las instrucciones correctas para copiar una BufferedImage, guardarla para posteriormente usarla.

¿Alguna idea?
  #2 (permalink)  
Antiguo 15/03/2006, 09:41
msi
 
Fecha de Ingreso: marzo-2005
Mensajes: 70
Antigüedad: 19 años, 2 meses
Puntos: 0
Casi lo tengo logrado. De hecho, me funciona trabajando sobre una imagen vacía (Image): OSI = createImage(widthOfOSI,heightOfOSI);

Lo malo es que necesito pintar sobre una plantilla (otra imagen) y ésto sólo lo consigo hacer con BufferedImage.

Creo que el "kit" está en estas 3 líneas:

if (command.equals("Deshacer")){
Image temp = OSI;
OSI = undoBuffer;
undoBuffer = temp;
repaint();
}


Yo intento esto sin éxito:
BufferedImage temp = imageBuffer.getSubimage(0,0,imageBuffer.getWidth() ,imageBuffer.getHeight());
imageBuffer = undoBuffer.getSubimage(0,0,undoBuffer.getWidth(),u ndoBuffer.getHeight());
undoBuffer = temp.getSubimage(0,0,temp.getWidth(),temp.getHeigh t());;


¿Acaso así no se copia la imagen?
  #3 (permalink)  
Antiguo 15/03/2006, 10:15
msi
 
Fecha de Ingreso: marzo-2005
Mensajes: 70
Antigüedad: 19 años, 2 meses
Puntos: 0
Al final ya conseguí solucionarlo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:31.