Image performant skalieren

Colt45

Aktives Mitglied
Mahlzeit!
Ich wirke gerade an einem Projekt für das DRK mit und stehe vor folgender problematik:
ich hab ein panel, in das eine Karte als jpg, gif, etc. geladen wird (idealerweise mit 4000x4000 pixel), welche ich per mousewheel beliebig hoch- und runterskalieren kann (quasi wie bei google maps). Das ganze muss aber verdammt schnell gehen. Hat da jemand eine Idee, wie ich das realisieren kann?
Freu mich über jede Anregung!
 
Eine rudimentäre Möglichkeit könnte sein, die zoom-Ansichten bei Programmstart zu berechnen und als eigene Bilder abzuspeichern und dann beim eigentlichen zoomen nur noch das Bild zu wechseln.
 
Muss ehrlich zugeben, ich hab noch gar nichts ausprobiert, weil wir noch in der Planungsphase stecken und uns noch am Datenbank-modell die Zähne ausbeissen. Wollte nur vorab ein paar infos, wie man das realisieren könnte, da ich selber mit studium und arbeit sehr eingespannt bin und mich nicht überschätzen möchte. Aber danke schonmal...
Das mit den zoom-ansichten bei programmstart laden find ich schonmal nicht schlecht.
Meine Idee war, ein virtuelles Raster über ads Bild zu legen, und dann die einzelnen quadrate parallel skalieren zu lassen, anstatt jeden pixel duchzugehen.
Lässt sich das mit scale() umsetzen?
 
Bevor du da ausgeklügelte Verfahren mit Kachelung und Parallelverarbeitung und Co drau losläßt, wäre es ratsam, einfach erstmal Graphics (Java Platform SE 6) zu machen, und zu schauen, ob das zu langsam ist. Das ganze wird ggf. hardwarebeschleunigt, es ist fast ausgeschlossen dass man dann "manuell" irgendwas schnelleres hinkriegt...
 
Freu mich über jede Anregung!
da sollte man sich ImageIO und JAI ansehen. ImageIO beherrscht das Laden in Tiles, also nach einem Gittermuster. Während einige Zellen schon dargestellt sind, werden die anderen geladen. JAI beherrscht mathematische Operationen, die nativ implementiert sind. Damit sollte die Skalierung und verschiedene Effekte etwas schneller gehen. Doch am performantesten ist meiner Erfahrung nach:

Graphics (Java 2 Platform SE v1.4.2)

mit dieser Funktion kann man gleichzeitig schneiden, spiegeln und skalieren. Diese Funktion wird direkt auf das native Grafiksystem des Betriebssystems abgebildet, bei Windows also auf DirectX und, falls vorhanden, auf die Grafikkarte. Man könnte zusätzlich versuchen das Bild als VolatileImage direkt im Grafikkarten-RAM abzulegen.

Ein weiterer Performancegewinn (nach eigener Erfahrung) ist, die Grafiken unkomprimiert (also BMP oder RAW) in einer normalkomprimierten Zip-Datei abzulegen und von dort zu laden. ZIPs kann Java schneller dekodieren als Grafiken.

Slawa
 

Neue Themen


Zurück
Oben