Wie kann ich in Java von einem bild mehrere Bilder entnehmen?

Beispiel Bild - (programmieren, Java)

2 Antworten

Das sollte doch so funktionieren, wie in der Dokumentation beschrieben:

https://docs.oracle.com/javase/tutorial/2d/images/drawimage.html

Die jeweiligen Koordinaten, Höhen und Breiten musst du entweder hart in dem Programmcode hineinschreiben oder noch besser in einer INI-Datei o.ä. speichern und zu Programmstart auslesen.

Das einfachste -- du nimmst das Bild, schneidest den entsprechenden Teil aus, speicherst ab  --- und setzt den ausgeschnittenen Teil ins JFrame

xlOguzhan 
Fragesteller
 13.08.2017, 09:46

Ja, aber grade darauf will ich verzichten 

0
regex9  13.08.2017, 14:04

Wie du siehst, handelt es sich hier um ein Tileset, der FS programmiert offensichtlich ein Spiel. Der Sinn eines Tileset ist es, alle Spielgrafiken in einem Bild zusammenzubringen, damit nur eine Datei einmal zu Programmstart geladen werden muss. Aus dem geladenen Bild werden dann die jeweiligen Pixel entnommen, die man für Grafik XY benötigt.

Für ein Spiel ist dies gegenüber dem Laden mehrerer Bilddateien eine Performaneoptimierung.

2
verreisterNutzer  13.08.2017, 20:57
@regex9

Ob ich jetzt 10 kleinere Bilder lade oder 1 Grosses, dass ich dann auch (vor Spielbeginn) auseinanderpflücken muss ??

Ich habe das nie realistisch und unter statistisch relevanten Methoden gemessen, aber zeitlich macht dies keinen Unterschied -- aber (programmtechnisch) einfacher und (auch programmtechnisch) logischer, ist es die Bilder einzeln zu laden und dann eventuell zusammenzusetzten, falls es nötig ist.

0
regex9  13.08.2017, 23:30
@verreisterNutzer

Es macht einen großen Unterschied und wird daher nicht nur in der Spieleentwicklung für Sprites sondern auch im Web für Icons oder andere kleine Grafiken verwendet (wenn da nicht bereits eh Fonts genutzt werden). Statt das Bild noch erst zu laden, befindet es sich bereits im Speicher und nur noch die relevanten Bildpunkte müssen herausgezogen werden. Vor allem bei animierten Sprites (wie sie auf dem Bild des FS zu finden sind) macht sich das bemerkbar.

Programmiertechnisch ist im Übrigen eine Fehlerquelle einfacher zu handhaben als mehrere verschiedene.

1
verreisterNutzer  14.08.2017, 09:30
@regex9

So wie ich die Frage verstanden habe, ging es nur um eine statische Anzeige. Wenn ich dann meine Figuren bewegen will, ist das ein ganz anderes Thema -- da muss ich die irgendwo (einzeln) im Speicher haben:

Ich bin immer noch der Meinung, es ist einfacher 10 Figuren als einzelne Bilder zu laden, anstatt alle Figuren in einem Bild zu laden und programmtechnisch auseinanderzupflücken.

Geschwindigkeit: Hier steht öfters für Spiele "unbedingt" eine SSD verwenden -- das ist doch genauso Quatsch -- die SSD beschleunigt das Laden des Spieles, danach steht es (hoffentlich) im RAM und nichts mehr muß nachgeladen werden.

In Zahlen, ich zocke 4 Stunden, dadurch, dass ich das Spiel auf einer SSD habe, lädt es in 2, statt in 20 Sekunden.

4Stunden snd 4 x 60 x 60 Sekunden = 14.400 Sekunden

mit SSD bin ich aber nur 14.388 Sekunden am Rechenr -- da freut sich aber Muttern und Vater, dass ich mit der neuen SSD ganze 0,1% weniger Zeit am Rechenr verbringe, als vorher

0
regex9  16.08.2017, 13:01
@verreisterNutzer

Wenn man sich das angehängte Bild anschaut, sieht man, dass es sich um ein Tileset mit animierten Sprites handelt.

Wenn ich dann meine Figuren bewegen will, ist das ein ganz anderes Thema (...)

Nein, ist es in diesem Kontext immer noch nicht. Doch mehr als es dir erklären kann ich es nicht. 😕

Wozu du dann auf die Nutzung von SSD abschweifst, verstehe ich nicht, werde daher darauf auch nicht eingehen. 😶

0