martes, 29 de enero de 2013

Mostrar Imagenes en Java Parte II

Bueno ahora comenzamos con la segunda parte del Tutorial...
Cuando mostramos una imagen en JAVA y queremos darle movimiento, por ejemplo que al apretar la flecha derecha en el teclado nustra imagen avance JAVA carga la imagen muchas veces lo que ocaciona un tintilleo en la imagen que es bastante molesto...
Para esto existe una Clase que se encarga de cargar en el Buffer del Computador la imagen antes de mostrarla en la pantalla (BufferStrategy) aca esta el codigo con Buffer y sin el para que se entienda la diferencia....


import java.awt.Color;

public class bufferedImage extends JFrame{
      Image imagen1,imagen2;
      InputStream imgStream;
      private BufferStrategy estrategia;//llamo a la clase
      int x;
      public bufferedImage(){
           
            super("BUFFERED IMAGE");
           
            this.setSize(600, 250);
        this.setVisible(true);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.addKeyListener(kl);//añadimos el key listener
        this.createBufferStrategy(2); //le damos a nuestra ventana la estrategia de guardar 2 veces la imagen en buffer
        x = 20;
        estrategia = getBufferStrategy();//iniciamos nuestra variable con la estrategia
        cargaImagen();
       
       
      }
public void cargaImagen(){
           
            try {
                  imgStream = imagenes.class.getResourceAsStream("img/7.png");
                  imagen1 = ImageIO.read(imgStream);
                  imgStream = imagenes.class.getResourceAsStream("img/0.png");
                  imagen2 = ImageIO.read(imgStream);
                 
            } catch (IOException e) {
                  // TODO Auto-generated catch block
                  e.printStackTrace();
            }
           

      }

public static void main(String[]arg){
            new bufferedImage();
      }

public void paint(Graphics g){
     
      Graphics g2 = (Graphics2D)g;
      Graphics g3 = (Graphics2D)estrategia.getDrawGraphics();//casteamos la estrategia
      g2.setColor(Color.BLACK);
      g3.fillRect(0, 0, 600, 250);
      g2.drawImage(imagen1, x, 50, 50, 50, null);//imagen sin buffer
      g3.drawImage(imagen2, x, 150, 50, 50, null);//imagen con buffer
      estrategia.show();//mostramos la estrategia
      repaint();
     
}
KeyListener kl = new KeyListener(){
     
     
      public void keyPressed(KeyEvent arg0) {
            int codigo = arg0.getKeyCode();

            if(codigo == KeyEvent.VK_RIGHT)
            {
                  x = x + 10;
            }
           
           
      }
     
      public void keyReleased(KeyEvent arg0) {
            // TODO Auto-generated method stub
           
      }

      public void keyTyped(KeyEvent arg0) {
            // TODO Auto-generated method stub
           
      }
};

}




Ahora si apretamos la tecla Flecha derecha vemos la diferencia entre las 2 imagenes!! Genial no???


3 comentarios:

  1. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  2. gran aporte pero me rompi la cabeza un rato con la carga de imagenes
    en esta linea iria :
    imgStream = bufferedImage.class.getResourceAsStream("img/7.png");
    aca tenes mal el codigo porq seguro lo copiaste del otro trabajo
    imgStream = imagenes.class...
    que es de la practica anterior

    ResponderEliminar