Buscar
Social
Ofertas laborales ES

Foro sobre Java EE > problema con drawimage

hola estoi empezando a programar un space invaders con java lo único que he hecho son dos clases la principal y el guardian cuando intento dibujar el guardian con drawimage me da un erro nullpointer excepctión a continuació dejo el codigo de las dos clases:

import java.awt.image.BufferedImage;
import java.awt.Color;
import javax.swing.JFrame;
import java.awt.Graphics2D;


public class Space_Invaders extends JFrame
{
//Ancho y Alto de la ventana
public static final int ANCHO = 800;
public static final int ALTO = 600;
//Guardian
private Guardian guardian;
private BufferedImage imguardian;

private Graphics2D graficos;

public static void main(String[] args) { new Space_Invaders(); }

public Space_Invaders()
{
// Propiedades de la ventana
this.setTitle("Space_invaders");
this.setSize(ANCHO, ALTO);
this.setLocation(150, 150);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setBackground(Color.black);
this.setVisible(true);

//inicimos el guardianimport java.awt.image.BufferedImage;


import java.io.File;
import javax.imageio.ImageIO;
import java.awt.Graphics2D;

public class Guardian
{
private static final String ruta = "imagenes/guardian.png";
public static int anchoImagen = 32;
public static int altoImagen = 32;

public BufferedImage getImagen()
{
try{
return ImageIO.read(new File(ruta)) ;
} catch(Exception e) { return null; }
}
public void dibujar(Graphics2D g2, BufferedImage im)
{
g2.drawImage(im, anchoImagen, altoImagen, null);
}
}
guardian = new Guardian();
imguardian = guardian.getImagen();
guardian.dibujar(graficos, imguardian);

}
}
muchas gracias de antemano.

mayo 10, 2012 | Unregistered Commenterjoaquin

Hola Joaquin.

Hace tiempo hice una especie de ide drag and drop por lo que acumule mucho conocimiento sobre las clases que usas.

Exactamente donde te salta el error??

A.- Al leer la imagen:
return ImageIO.read(new File(ruta)) ;

B.- Parece que tu error esta en :
g2.drawImage(im, anchoImagen, altoImagen, null);

g2 debe ser una instancia valida. Si no me equivoco una instancia valida la puedes obtener de 02 formas :

1.- Sobrescribiendo el metodo paint de la clase JComponent ( osea un JPanel o JFrame en el mayor de los casos )

public void paint(Graphics g){
Graphics2D g2 = (Graphics2D)g;
}

2.- Intanciando un BufferedImage apartir de una imagen en disco( tratar la imagen) o una instancia vacia (crear una imagen)

//imagen vacia, lista para dibujarle
BufferedImage imagen = new BufferedImage(100, 100,BufferedImage.TYPE_INT_RGB);
//imagen a modificar o a usar para algo
BufferedImage imagen = ImageIO.read(this.getClass().getResource("WhiteSpot.jpg"));

Graphics g = imagen.getGraphics();
Graphics2D g2 = (Graphics2D)g;

Solo despues de esto podras usar lo metodos drawImage, drawOval, drawLine, etc etc.

Links de interes:

http://chuwiki.chuidiang.org/index.php?title=Guardar_imagen_en_fichero
http://www.exampledepot.com/egs/java.awt.image/CreateBuf.html
http://oreilly.com/catalog/java2d/chapter/ch04.html
http://www.leepoint.net/notes-java/GUI-lowlevel/graphics/43buffimage.html
http://www.java2s.com/Code/Java/2D-Graphics-GUI/AntiAlias.htm
http://ricardofanjul.blogspot.com/2007/03/librerias-para-editar-imagenes-en-java.html
http://www.exampledepot.com/egs/java.awt.image/imagepixel.html
http://www.devdaily.com/blog/post/java/getting-rgb-values-for-each-pixel-in-image-using-java-bufferedi

Despues de leer estas webs, seras capaz hasta de dibujar fractales en tus apps :) !!

Saludos!!
www.youtube.com/user/ZERL1NG

mayo 11, 2012 | Registered Commenterjrichard