Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Kuvan tulostaminen Javalla

Sivun loppuun

kwanttitatti [02.08.2007 12:03:35]

#

Eli minulla on tälläinen ongelma että en oikein löydä oikeaa tapaa tulostaa näytölle kuva Javalla.Jos joku ystävällisesti voisi kertoa miten se tehdään.Olen tekemässä pientä rooliepliä ja tarvitsisin tätä tietoa siinä aivan ehdottomasti muuten pelistä tulee hirveän sekava.

kpzpt [03.08.2007 18:51:03]

#

Hello!

Oletko tekemässä Applettia vaiko Applicationia..
tässä olisi Application joka lataa kuvan ja tulostaa sen..

ota helppo käyttöinen NetBeans IDE käyttöösi jos ei jo ole ja sillä kompile/run toi koodi..

laita kuva.gif build/classes hakemistoon..

jos tarvitset apua Appletin kanssa niin kysy..

käytin Java 1.4.12 JDKta kun koodasin..

//----

JariTapio / Helsinki

package components;

import java.awt.Canvas;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class myDemo extends Canvas
{
    public myDemo()
    {
        JFrame frame = new JFrame("DamnGood-Example!");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Dimension dim = new Dimension();
        dim.width  = 640;
        dim.height = 480;
        this.setSize(dim);
        frame.getContentPane().add(this);
        frame.setLocation (200,200);

        BufferedImage bimg = loadBImage ("/kuva.gif"); // Tämä rivi lataa kuvan muistiin..

        frame.pack();
        frame.setVisible(true);

        while ( true == true )
        {
            try {
                Thread.sleep(100);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
            this.getGraphics().drawImage(bimg, 0, 0, this); // Tämä rivi piirtää kuvan näytölle..
        }
    }
//---
// BufferedImage loader.. Tämä käsky lataa kuvan muistiin..
    public BufferedImage loadBImage ( String resr )  {
        try {
            BufferedImage bimg;
            bimg = ImageIO.read(new BufferedInputStream(getClass().getResourceAsStream(resr)));
            return bimg;
        } catch (Exception e) {
            System.out.println("Error loading image: " + resr + " " );
            System.exit(0);
            return null;
        }
    }
//---
    /**
     * Create the GUI and show it.  For thread safety,
     * this method should be invoked from the
     * event-dispatching thread.
     */
    public static void main(String[] args)
    {
        myDemo demo = new myDemo ();
    }
}

(Mod. Edit. Kooditagit, eikö näistä ole ennenkin jo huomautettu? Ja vähän varovaisuutta pitkien rivien kanssa, jos saa pyytää.)

kwanttitatti [04.08.2007 15:54:20]

#

Kiitos.Ei ole ihan niin helppoa kuin luulin.No eiköh'n se tästä lähde.

Mobel [04.08.2007 20:54:53]

#

Jos toteutat pelisi applettina homma helpottuu kummasti.

import java.applet.*;
import java.awt.*;

public class Peli extends Applet{

  Image kuva; //muuttuja kuvalle

  public void init(){ //vastaa applicationin main-metodia
     kuva=getImage(getCodeBase(), "kuva.png"); //getCodeBase():lla päästään hakemaan kuvaa samasta hakemistosta, missä
     //class-tiedosto on
     repaint(); //repaint() päivittää piirtopinnan
  }

  public void paint(Graphics g){
     g.drawImage(kuva, 100, 100, this); //piirretään kuva kohtaan 100,100
  }
}

Lisää kuvien piirrosta löytyy Sunin tutoriaaleista

kwanttitatti [05.08.2007 11:19:08]

#

Kiitos.Tuo taitaa olla hieman helpompi tapa.

kpzpt [06.08.2007 12:00:01]

#

Hello!

Toimikos toi Appletti koodi sulla ajossa??
mä en oo kylläkään mikään ammattilainen tän Javan kanssa, mutta,
toi getimage ainoastaan lukee siellä taustalla tota imagea, eli,
toi repaint saatetaan kutsua ennenkuin toi image on latautunut kokonaansa..
jolloinka kuva ei ehdikkään piirtyä ennen esimerkki ohjelman suorituksen loppumista..

siihen appletti koodiin on hyvä lisätä vielä..

while (kuva.getwidth()==0){};

ennen repainttia niin kuva, jos löytyy, latautuu kokonaansa ennen piirtoa..
voi myös jättää luuppiin jos kuvaa ei löydy ja myös ohjelman teho vaatimukset nousevat 100% loopin ajaksi..

taikka sitten seuraavasti/paremmin,
käytän itse seuraavaa lyhyttä koodia Appleteissa lataamaan kuvia,
koodi ei ole vielä onnistunut olemaan toimimatta..

//--------------------------------------------------
    public Image _waitForImage( String filename ){
        Image l_temp;
        MediaTracker tracker = new MediaTracker( this );
        l_temp = getImage( getCodeBase(), filename );
        tracker.addImage( l_temp , 0 );
        try
        {
            tracker.waitForID(0);
        } catch ( InterruptedException e )
        {
        }
        return ( l_temp );
    }
//--------------------------------------------------

JariTapio / Helsinki

Mobel [06.08.2007 13:37:53]

#

Tuo on täysin totta.
Yritin vain pelkistää kuvan lataamiseen tarvittavaa koodia, mutta olisi tietysti ollut hyvä esitellä myös tuo sinun kertomasi "lataamisen odotus"-koodi. Omissa(melko pienissä) jutuissa, joista olen tuon jättänyt pois on homma kuitenkin toiminut melko hyvin. Kuitenkin olisi järkevää opetella oikea tyyli jo heti alussa.

kossupullo:
Ja jos kehitysympäristöä olet hakemassa, ehdottaisin vapaan lähdekoodin eclipseä.

kwanttitatti [10.08.2007 10:45:59]

#

Käytänkin Eclipseä ja hyvä onkin.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta