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

[SOLUCIONADO] Como guardar la imagen de toda el area de un Canvas en una variable o BufferedImage

Estas en el tema de Como guardar la imagen de toda el area de un Canvas en una variable o BufferedImage en el foro de Java en Foros del Web. Suponiendo que tengo un código en canvas donde el método paint tengo por ejemplo que pinte una línea de color azul en un área de ...
  #1 (permalink)  
Antiguo 31/07/2014, 15:32
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 3 meses
Puntos: 1
Como guardar la imagen de toda el area de un Canvas en una variable o BufferedImage

Suponiendo que tengo un código en canvas donde el método paint tengo por ejemplo que pinte una línea de color azul en un área de ese canvas.

¿ Como puedo hacer para guardar luego todo ese área que he pintado en una variable tipo array o tipo BufferedImage ?

He encontrado código donde me guarda ese área e un fichero, pero me interesa que lo guarde en un buffer o array para luego recuperarlo por ejemplo con el método drawImage de Graphics.


Código:
public void paint(Graphics g) 
	  {		
              g.setColor(Color.blue);
              g.drawLine(1,1,100,100);		 
	  }
  #2 (permalink)  
Antiguo 04/08/2014, 02:33
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Como guardar la imagen de toda el area de un Canvas en una variable o Buff

Crea el buffered image de tamaño adecuado y luego basta con hacer esto

tuCanvas.paint( tuBufferedImage.getGraphics() );

es decir, llamar al método paint de tu Canvas pasándole el Graphics que obtienes del bufferedImage.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 05/08/2014, 17:08
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Como guardar la imagen de toda el area de un Canvas en una variable o Buff

No acabo de entenderlo Podrias poner un ejemplo con mas código.?

Si le paso el Graphics con tuCanvas.paint( tuBufferedImage.getGraphics() );

En el método Paint que tengo del canvas como tengo que poner el código ? para que me muestre el buffer con la imagen con un drawImage ??

Ya que mi método canvas es asi,

Código:
public class Ventana extends Canvas 
{


	
	public void update(Graphics g) // update() para que no me borre el fondo.
	 {	
	    paint(g);
	 }
	
	public void paint(Graphics g) 
	  {		
		 g.drawImage("Aquí necesita un bufferedImage o image con la imagen capturada", 0, 0, null);
	  }
	
}
Por otra parte como creo un método que me grave en un bufferedImage lo que he pintado en el paint del canvas anterior !!
  #4 (permalink)  
Antiguo 06/08/2014, 00:50
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Como guardar la imagen de toda el area de un Canvas en una variable o Buff

Creo que no entiendo bien. ¿Qué quieres hacer? ¿Meter lo del paint en un BufferedImage o pintar con paint() un BufferedImage?

Si tu paint() tiene lo que pusiste primero setColor() y drawLine() y quieres que eso se guarde en un BufferedImage, puedes hacer como te he dicho. A partir de ahí ya puedes dibujar ese BufferedImage donde quieras.

Si lo que quieres es que tu paint() use un BufferedImage, puedes hacer esto

Código Java:
Ver original
  1. public class TuClase extends Canvas {
  2.     BufferedImage bi = null;
  3.     public void paint(Graphics g) {
  4.           if (null==bi) {
  5.               bi = new BufferedImage(....);
  6.               bi.getGraphics().setColor(...);
  7.               bi.getGraphics().drawLine(....);
  8.           }
  9.           g.drawImage(bi, ....);
  10.     }

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 07/08/2014, 15:45
Avatar de loganbdn  
Fecha de Ingreso: enero-2009
Ubicación: Badalona
Mensajes: 114
Antigüedad: 15 años, 3 meses
Puntos: 1
Respuesta: Como guardar la imagen de toda el area de un Canvas en una variable o Buff

Gracias alfinal lo tengo asi, por una parte para volcar un BufferedImage tengo puesto esto:

Código:
public static void main(....)
{
....
BufferedImage bImagen = new BufferedImage(160,200, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bImagen.createGraphics();
g2.setColor(Color.BLUE);
g2.drawLine(50,50,100,100);
ventana.vuelcaImagen(bImagen); // Pinta primera línea
g2.setColor(Color.RED);
g2.drawLine(100,50,50,100);    // Pinta segunda linea
ventana.vuelcaImagen(bImagen);
...
}
y lo hago fuera de la clase canvas porque me interesa controlar cuando volcar la imagen y que esta luego se pinte al llamar a la clase ventana que hereda de canvas que tiene el paint.


Código:
public class Ventana extends Canvas 
{
	private BufferedImage bImg; 
	
	public Ventana()
	  {
		this.setBackground(Color.black); 	
	  }
	
	public void vuelcaImagen(BufferedImage bImg)
	  {
        this.bImg=bImg;
	  }
	
	public void update(Graphics g) // update() para que no me borre el fondo.
	 {	
	    paint(g);
	 }
	
	public void paint(Graphics g) 
	  {		
		 g.drawImage(this.bImg, 0, 0, this);
	  }
	
}

Por otra parte como decía al principio también quiero capturar una zona de pantalla ya pintada en este caso como ya lo tengo guardado en BufferedImage como lo hago para capturar un trozo de ese BufferedImage y guardarlo en otro BufferedImage diferente?

Si quiero dibujar una imagen .gif dentro del main con g2.drawImage como lo hago pues con g2.drawImage(miImagenGif,posx.posy,this); no puedo ya que el this me marca un error que dice: "Cannot use this in a static context "

Última edición por loganbdn; 07/08/2014 a las 16:50

Etiquetas: area, canvas, variable
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 11:20.