Tuli aivan käsittämätön ongelma eteen. Yritin Googlettaa mutta vastaavaa ongelmaa en löytänyt. Eli, olen tekemässä Javalla pientä applettia, ja huomasin että kun käytän jpg kuvaa niin toimii normaalisti, mutta jos lataankin jpg (tai gif) kuvan sijasta png kuvan niin appletti menee aivan tukkoon. Mitään muutoksia en koodiin tee eri formaattien välillä, eikä tarvetta pitäisikään olla. Käytän Graphics oliota, Image oliota kuville ja kaksoispuskurointia.
Jotain koodia vielä:
// Intro while(intro) { if (threadSuspended) { synchronized(this) { while (threadSuspended) { wait(); } } } backg.drawImage(logo, 0, 0, null); // TÄSSÄ PIIRRETÄÄN PNG/JPG KUVA backg.setColor(new Color(255, 255, 255, opaque)); backg.drawString("press ENTER to continue", 170, 160); if (opaq == true) { opaque += 3; if (opaque >= 255) opaq = false; } else { opaque -= 3; if (opaque <= 0) opaq = true; } repaint(); thread.sleep(5); }
public void update(Graphics g) { g.drawImage(backbuffer, 0, 0, this); } public void paint(Graphics g) { update(g); }
Meni muotoilut pastettaessa perseelleen mutta jospa siitä saisi selvän.
En osaa Javaa oikein, eikä ole aikaa liiemmin näin nopeasti tutustua, mutta tuli vain mieleen, ettet vain lataa .png:tä muistiin joka piirtokerta? Et välttämättä huomaa aivan mielettömän traagista nopeuseroa jos lataat .jpg:tä, koska se on paljon kevyemmin pakattu - .png:n purkamiseen taas menii lyhyehkö hetki, mikä loopissa voi alkaa tuntumaan..
Heitän vain näin arvauksena, voi mennä ihan pieleen ^^;
Meikänki Javasta on aikaa, mutta eikös kaksoispuskuroinnissa updatessa kutsuta painttia, eikä toistepäi?
Ettei png-kuvassasi olisi läpinäkyvyys päällä (asetettu yksi paletin väreistä läpinäkyväksi)? Jpg ei nimittäin tue läpinäkyvyyttä, mutta png sen sijaan tukee tätä ja ilman rautakiihdytystä ero läpinäkyvän ja läpinäkymättömän kuvan piirron välillä voi olla merkittävä.
Voit kokeilla korjata nopeuseron joko tekemällä png-kuvastasi läpinäkymättömän tai kytkemällä opengl-kiihdytyksen päälle. Opengl:n saat päälle antamalla javalle parametriksi "-Dsun.java2d.opengl=true", eli käynnistät ohjelmasi esim. "java -Dsun.java2d.opengl=true MunOhjelma".
Tulipas mieleen että ongelma voi johtua siitä että kuva on eri formaattia kun näyttö, jolloin se muunnetaan oikeaan muotoon joka kerta.
Voisit yrittää etsiä tämän tyyppinen metodi java api:sta http://www.libsdl.org/cgi/docwiki.cgi/
Aihe on jo aika vanha, joten et voi enää vastata siihen.