Gå til innhold

Anbefalte innlegg

Jeg prøver å lage et enkelt spill i java, men jeg har litt problemer med å finne ut hvordan jeg kan bruke bildefiler fra disk til å tegne direkte på en JPanel ut i fra x og y kordinater. Bildene er i png format. Er det noen som har noe nyttig informasjon for å hjelpe meg med dette? Jeg er relativt ny i java gui programmering, men har noe erfaring fra andre språk.

 

Oppdatering;

 

Jeg har fått ting til å virke med følgende kode:

 

ImageIcon img = new ImageIcon("bilde.png");

g.drawImage(img.getImage(), x, y, this);

 

men jeg forstår ikke helt hva siste parameter er godt for i drawImage, og jeg har vanskelig for å tro at dette er den beste måten å gjøre det på.

Endret av invictus
Lenke til kommentar
Videoannonse
Annonse

Tror ikke det er så dumt å bruke ImageIcon, selv om koden kan se litt rar ut ved første øyekast. ImageIcon har en stabil og sikker måte å laste et bilde på, den bruker en MediaTracker til å laste bildet - denne passer på at programmet ikke prøver å bruke bildet før det er ferdig lastet (særlig viktig hvis du bruker bilder fra nett).

 

Siden det er et spill du holder på med, skal du sikkert bruke bildet flere ganger. Da er det nok lurt å lagre en referanse til bildet på klassenivå i stedet for å laste bildet hver gang du tegner det.

 

Deklarer på klassenivå:

Image bilde;

 

Så laster du bildet i constructoren e.l.

 

bilde = (new ImageIcon("bilde.png")).getImage();

 

Da kan du tegne bildet i painComponent metoden med:

g.drawImage(bilde, x, y, this);

Lenke til kommentar

Den siste parameteren er vel en ImageObserver, om jeg ikke husker feil. Du har ingen grunn til å begynne med å rote rundt med å skreddersy din egen imageobserver. (Med mindre du ønsker søvnløse netter da). JPanel arver en ImageObserver, derav referansen 'this'. Bare fortsett som du gjør.

Lenke til kommentar

Dette er kode for doublebuffering (tatt fra en sun tutorial http://java.sun.com/docs/books/tutorial/2d...ebuffering.html )

 

 

Doublebuffering gir deg smoothere animasjoner ved å først tegne på et off-screen buffer, og så tegne bufferet på skjerm etterpå. Og da kan du bare skrive dette bufferet til fil etterpå.

 

private firstTime = true;
private Rectangle area;
private BufferedImage bi;
private Graphics2D big;

public void paint( Graphics g )
{
   update(g);
}

public void update( Graphics g )
{
   Graphics2D g2 = (Graphics2D)g;

   if(firstTime) 
   {
       Dimension dim = getSize();
       int w = dim.width;
       int h = dim.height;
       area = new Rectangle(dim);
       bi = (BufferedImage)createImage(w, h);
       big = bi.createGraphics();
       rect.setLocation(w/2-50, h/2-25);
       big.setStroke(new BasicStroke(8.0f));
       firstTime = false;
   }

   // Clears the rectangle that was previously drawn.
   big.setColor(Color.white);
   big.clearRect(0, 0, area.width, area.height);

   // Draws and fills the newly positioned rectangle
   // to the buffer.
   big.fillRect( 10, 10, 100, 100 );

   // Draws the buffered image to the screen.
   g2.drawImage(bi, 0, 0, this);
}

 

Deretter kan du bare skrive BufferedImage til fil ved å bruke følgende kode (har ikke testa, men tror dette skal funke).

 

public void skrivBildeTilFil()
{
   javax.imageio.ImageIO.write(bi, "png", new File("bilde.png"));
}

Endret av krigun
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...