# Problem mit PNG Bildern



## Paladin (15. Jan 2007)

Hi,

bei dem Spiel was ich zur Zeit schreibe habe ich das folgende Problem:
Ich benutze für einige Objekte png Bilder weil diese Transparenz darstellen können. Also zum Beispiel habe
ich ein Haus welches einen Transparenten Hintergrund hat und das einen Schatten wirft (Ansicht von oben). 
Leider wirkt sich die Verwendung von pngs extrem negativ auf die Performance des Spiels aus. 
Kann ich die png Bilder in ein anderes Format wandeln welches kleiner ist und trotzdem transparenz unterstützt?

Danke im Voraus

Gruß

Paladin


----------



## Wildcard (15. Jan 2007)

gif?


----------



## Paladin (15. Jan 2007)

Ok mit der Transparenz das klappt. Aber was ist mit Schatten? Wenn ich mein png Bild
als Gif abspeichere sieht der Schatten einfach sch***** aus.


----------



## Wildcard (15. Jan 2007)

Dann bleib bei png  :wink:


----------



## Paladin (15. Jan 2007)

Gibt es denn keine Möglichkeit die Schatten ähnlich gut wie bei einem png darzustellen?


----------



## Wildcard (15. Jan 2007)

Ein gif hat weniger Farben.
png ist ja nicht aus spaß an der Freude größer als gif.
Performancemäßig dürfte es übrigens keine großen Unterschiede geben, da im Speicher beide Formate gleich groß sind.


----------



## Paladin (15. Jan 2007)

Wenn ich dich richtig verstanden habe, dann sollte es von der Performance keinen Unterschied machen ob ich in meinem Spiel ein gif oder ein png zeichne. 
Entweder ich zeichne die Bilder falsch oder die Aussage kann so nicht ganz stimmen denn wenn ich aus allen Objekten die ich auf den Bildschirm zeichne png's mache fängt die ganze Geschichte ganz übel zu ruckeln an.

Wenn ich mein Spielfeld als gif lade nimmt der Prozess javaw ca. 40MB. Wenn ich aber das Spielfeld als png lade nimmt der Prozess mal locker 95MB.


----------



## Wildcard (15. Jan 2007)

Initial brauchtst du mehr Speicher und Resourcen um ein PNG zu laden.
Sobald du daraus aber ein Image gemacht hast sollte es egal sein, da Image-Objekte nicht mehr komprimiert sind.
Wenn alles geladen ist darf es eigentlich keinen Unterschied in der Zeichengeschwindigkeit mehr geben.


----------



## Paladin (15. Jan 2007)

Ich benutze nur BufferedImages. Ist das ein Problem? Sollte ich eher "normale" Images benutzen?


----------



## Wildcard (15. Jan 2007)

Nein, das hat damit nichts zu tun.


----------



## Paladin (15. Jan 2007)

Danke für die Hilfe. 

Ich werde mal überprüfen warum ich solche Probleme beim darstellen der pngs habe.

Gruß

Paladin


----------



## Illuvatar (15. Jan 2007)

Mit welcher Methode liest du die Bilder ein?


----------



## EgonOlsen (15. Jan 2007)

Wildcard hat gesagt.:
			
		

> Initial brauchtst du mehr Speicher und Resourcen um ein PNG zu laden.
> Sobald du daraus aber ein Image gemacht hast sollte es egal sein, da Image-Objekte nicht mehr komprimiert sind.
> Wenn alles geladen ist darf es eigentlich keinen Unterschied in der Zeichengeschwindigkeit mehr geben.


Aber PNGs können einen Alpha-Kanal haben, GIFs nicht. Bilder mit Alphakanal waren mal ein Performanceproblem in Java. Aber sollte sich das nicht seit Java5/6 gegeben haben...?


----------



## Wildcard (15. Jan 2007)

Das resultierende Image hat doch aber auch bei gifs einen Alphakanal (auch wenn dieser immer 255 oder 0 ist)  ???:L


----------



## Paladin (15. Jan 2007)

ich habe eine Methode die vor dem Bau der GUI geladen wird. Diese lädt die Bilder.
Alle Bilder sind vom Typ BufferedImage.


```
public void loadImages() {
	
    try {
        battlefield = ImageIO.read(new File("grafix//battlefield1.gif"));
        tank_solo = ImageIO.read(new File("grafix//tank_solo.png"));
        tank_top = ImageIO.read(new File("grafix//tank_top.png"));
        tank_top_cannonfire = ImageIO.read(new File("grafix//tank_top_cannonfire.png"));
        amucity_lower = ImageIO.read(new File("grafix/AmmuCity.png"));
        amucity_upper = ImageIO.read(new File("grafix/AmmuCityDach.png"));
        statusDiesel_lower = ImageIO.read(new File("grafix/Status_diesel.png"));
        status_glass = ImageIO.read(new File("grafix/Status_Glass_Small.png"));
        ...
    catch(Exception ex) {
        ex.printStackTrace();
    }
}
```


----------



## EgonOlsen (15. Jan 2007)

Wildcard hat gesagt.:
			
		

> Das resultierende Image hat doch aber auch bei gifs einen Alphakanal (auch wenn dieser immer 255 oder 0 ist)  ???:L


Ganz sicher das es da nicht eine Art Bitmask-Copy gibt, was stattdessen benutzt wird?


----------



## Wildcard (15. Jan 2007)

Nicht im geringsten sicher. Schuß ins Blaue


----------

