Skalierung von Bildern zum Start des Programms

xyss

Aktives Mitglied
Guten Morgen java-forum Community.

Ich bin gerade dabei, ein kleines Spiel zu programmieren. Zu einem Spiel gehören natürlich immer Grafiken, welche geladen werden. Das gestaltet sich eigentlich als ziemlich einfach, da ich direkt am Anfang die Grafiken laden lasse, so dass zur Laufzeit keine Grafiken mehr geladen werden müssen. Mein Problem liegt nun beim Skalieren der Bilder.

Das Skalieren benötige ich für folgende Fälle:
In einem YAML-Dokument kann man für jedes "Item" im Spiel gewisse Properties sowie auch Höhe/Breite festlegen, und eine Datei angeben, welche die Textur beinhaltet. Falls diese Bild-Datei eine andere Höhe/Breite als die angegebene hat, wird das Bild auf diese Werte skaliert.
Zudem läuft das Spiel im Fullscreen, das heißt, die Hintergrundgrafik muss ebenfalls skaliert werden.

Das Ganze läuft aktuell über

[Java]
img = new ImageIcon(getClass().getResource("gfx/bg1.png")).getImage().getScaledInstance(width, height, Image.SCALE_FAST);
...
...
...
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(img, 0, 0, null);
[/Java]

Mein Problem ist nun, dass für eine kurze Zeit das Bild erst einmal weiß ist, und nach mehreren repaint()-Aufrufen das Bild erst erscheint (da getScaledImage asynchron läuft, sofern ich das richtig verstanden habe).

Nun würde ich gerne wissen, ob ich irgendwie überprüfen kann, wann getScaledImage fertig ist, also wann das Bild fertig skaliert ist, denn es wäre ja am praktischsten, den Frame erst dann auf visible zu setzen, wenn die Grafiken alle fertig geladen sind.
 

Bug Fisher

Bekanntes Mitglied
Hallo xyss,

das Verhalten ist ja echt nicht so toll.
Vor allem was die Doku dazu sagt ist ziemlich dürftig; ich kann es nicht so richtig deuten:
The new Image object may be loaded asynchronously even if the original source image has already been loaded completely.

Mein Alternativvorschlag wäre das Skalieren in ungefähr der Gestalt:
Java:
final BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
final Graphics2D g = img.createGraphics();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g.drawImage(imageToScale, width, height, null);
 

xyss

Aktives Mitglied
Alles klar, ich werde dann demnächst deinen Vorschlag ausprobieren (fahre demnächst erstmal in Urlaub), ich werde mein Ergebnis dann posten!

Ein kleines Anhängsel zu dem gleichen Thema:

Ich hatte rein interessehalber das hier versucht:

[Java]
img = new ImageIcon(getClass().getResource("gfx/bg1.png")).getImage().getScaledInstance(width, height, Image.SCALE_FAST);
while ((img.getWidth(null) != width) && (img.getHeight(null)) != height){
}
...
...
...
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(img, 0, 0, null);
[/Java]

Mein Idee war halt, dass das Programm in dieser while-Schleife hängt, bis das Bild fertig skaliert wurde.. hat auch soweit funktioniert (jedenfalls resultierte es nicht in einer Endlosschleife, und die Breite / Länge von img waren direkt nach der while-Schleife auch korrekt. Allerdings wurde das Bild trotzdem erst nach mehreren repaint Aufrufen gezeichnet, obwohl diese while-Schleife vor den repaint-Aufrufen war... das verstehe ich nicht so wirklich. Mehr Code kann ich leider nicht dranhängen, da es wie gesagt nur zum Testen war, als "unelegante Übergangslösung", aber direkt wieder verworfen wurde.

lg
 

xyss

Aktives Mitglied
Ich habe deinen Codeschnipsel nun eingebaut, jedoch wird das Bild nun gar nicht mehr gezeichnet, sondern einfach gar nichts mehr.
Die Variable background ist das, was du bei dir als imageToScale bezeichnet hast.

Java:
	public void paint(Graphics g){
		Graphics2D g2d = (Graphics2D) g;
		g2d.drawImage(background, 0, 0, null);
	}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
X Print Dialog und Skalierung Probleme Allgemeine Java-Themen 4
K Anzeigemöglichkeit von Bildern in JavaFX mit Hilfe von MongoDB GridFS Allgemeine Java-Themen 0
R Optimierung beim Vergleichen von 2 Bildern Allgemeine Java-Themen 23
E Swing Array mit Bildern in GUI darstellen Allgemeine Java-Themen 2
I Methoden Schnelle Hilfe benötigt - Kleines Video/Slideshow aus mehreren Bildern erstellen Allgemeine Java-Themen 3
D Tool zum skalieren von bildern Allgemeine Java-Themen 4
A Metadaten von Bildern auslesen und verändern Allgemeine Java-Themen 5
Kr0e Differenzen von Bildern berechnen - Remote control Allgemeine Java-Themen 2
F hex-farbwert der pixel aus bildern lesen Allgemeine Java-Themen 4
K Thread mit Bildern Allgemeine Java-Themen 3
B Suche Paket zum auslesen von Metadaten von Bildern. Allgemeine Java-Themen 4
L Problem beim animieren von Bildern in Applet Allgemeine Java-Themen 23
K Positionierung von Labels mit Bildern über anderen Allgemeine Java-Themen 8
X Mustererkennung von JPG Bildern Allgemeine Java-Themen 5
data89 Java und HTML-Seiten mit Bildern - Wie passt das zusammen? Allgemeine Java-Themen 2
K Schreiben von Bildern: Bild bleibt leer Allgemeine Java-Themen 7
Q Rotation von Bildern schlägt fehl Allgemeine Java-Themen 8
I Qualität von bearbeiteten Bildern? Allgemeine Java-Themen 3
S software zum zuschneiden von Bildern Allgemeine Java-Themen 2
P Abspeicherung von Bildern Allgemeine Java-Themen 7
T Langsames Laden von Bildern und Heap Exception Allgemeine Java-Themen 7
T Verkleinerung von Bildern Allgemeine Java-Themen 23
M transparenz bei png bildern beibehalten Allgemeine Java-Themen 11
A Schnelles laden von Bildern Allgemeine Java-Themen 3
M Problem beim laden von vielen Bildern Allgemeine Java-Themen 16
D Problem mit Bilderupload von lokalen Bildern bei eBay Allgemeine Java-Themen 8
M Strukturen in Bildern vergleichen Allgemeine Java-Themen 6
C Download von Bildern etc. realisieren Allgemeine Java-Themen 2
W Jar-File Start nur über Terminal Allgemeine Java-Themen 13
J Junit start surefire for manual testing Allgemeine Java-Themen 1
KeTho1712 Java Swing: JTable standardmäßig füllen, sodass bei Start bereits Datensätze gespeichert sind Allgemeine Java-Themen 1
J Linux .jar beim Start automatisch ausführen Allgemeine Java-Themen 6
O Start externer Programme Allgemeine Java-Themen 1
Meeresgott Best Practice Java to exe oder exe to start java ? Allgemeine Java-Themen 5
J Probleme exe-Start mit Task Scheduler Allgemeine Java-Themen 1
T Erste Schritte FAIL - Deployed application at context path / but context failed to start Allgemeine Java-Themen 1
JavaNewbie2.0 Start eines Anderen Programm erkennen Allgemeine Java-Themen 6
K Erste Schritte Start einer JAR Datei 2 Wege aber einmal nicht die volle Funktionlität Allgemeine Java-Themen 20
P Java https proxy (-Dhttps.proxyHost) Start-Parameter funktioniert nicht? Allgemeine Java-Themen 2
C Can't start application since jvm.dll is not installed Allgemeine Java-Themen 1
L Java Web Start - generierter Prozess Allgemeine Java-Themen 4
M Swing JFreechart x-Achse DateAxis, start im Ursprung Allgemeine Java-Themen 3
F Java Error, bei Installation, Start und dem Control Panal Allgemeine Java-Themen 8
S Start des zweiten Threads erst nach Beenden des ersten Threads Allgemeine Java-Themen 13
X Problem bei process.start() ExitValue Allgemeine Java-Themen 5
B Best Practice Start-Applikation mit Logger? Allgemeine Java-Themen 3
A Start Ladescreen Allgemeine Java-Themen 2
A Could not find main class: start Allgemeine Java-Themen 5
S Probleme beim Start von jar Datein Allgemeine Java-Themen 15
G Webstart Java Web Start und native Bibliotheken Allgemeine Java-Themen 3
P Problem mit Java Web Start Allgemeine Java-Themen 1
L Java Web Start: IE Konfiguration? Allgemeine Java-Themen 5
H Unterschied EventQueue.invoke... und thread.start() Allgemeine Java-Themen 4
J Dateinamen beim Start auslesen Allgemeine Java-Themen 10
H Mehrfachen Start des Programms verhindern Allgemeine Java-Themen 6
F Java Web Start Parameterübergabe an Applikationsumgebung Allgemeine Java-Themen 2
A Start von Java Plugin Allgemeine Java-Themen 2
M Java Web Start - Native DLL einbinden Allgemeine Java-Themen 2
D Speicher beim Start zuweisen Allgemeine Java-Themen 10
Q 32 bit 64 bit start up problem Allgemeine Java-Themen 6
T JDialog vor Hauptfenster beim Start Allgemeine Java-Themen 5
E Focus nach Start eines externen Programmes Allgemeine Java-Themen 6
H Webstart...Start dauert ewig... Allgemeine Java-Themen 5
G Auf den Start eines Threads warten? Allgemeine Java-Themen 4
T Mehrmaligen Start verhindern Allgemeine Java-Themen 19
W Windows XP: ProcessBuilder.start: Kommandoshell anzeigen Allgemeine Java-Themen 3
G Prozess direkt starten beim Start des Appservers Allgemeine Java-Themen 3
M Probleme Runtime.getRuntime().exec(Start.cmd); Allgemeine Java-Themen 10
M Windows: Start --> Ausführen --> [url]http://meine.url.com[/url] Allgemeine Java-Themen 3
P Start eines Programms scheitert an Java Allgemeine Java-Themen 9
B Start - Schwierigkeiten Allgemeine Java-Themen 10
zilti Eclipse meldet Fehler beim Start Allgemeine Java-Themen 8
L Nutzt Java bei Start der VM übermäßig viel Speicher? Allgemeine Java-Themen 3
G In Eclipse läufts, aber bei java Start.class gehts nicht Allgemeine Java-Themen 8
M Fehler beim Start des Chat-Applets von java-forum.org Allgemeine Java-Themen 10
C Java Web Start Allgemeine Java-Themen 3
M Access lässt sich nicht über "exec(command)" start Allgemeine Java-Themen 3
S eclipse start bringt fehler Allgemeine Java-Themen 2
S API für Start-menu und Links Allgemeine Java-Themen 2
T doppelgeklickte Datei automatisch nach Start des Prog öffnen Allgemeine Java-Themen 2
G Runtime.getRuntime().exec("cmd /c START") Allgemeine Java-Themen 3
F IE-Applet vs. Java Web Start Allgemeine Java-Themen 5
X Applikation Java Web Start fähig machen Allgemeine Java-Themen 4
X Parameter bei Start über Batch-Datei übergeben(Tag und Zeit) Allgemeine Java-Themen 3
S Java Web Start Anwendungen laden nicht vernünftig Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben