Einzelnen Beitrag anzeigen

flipdascript

Registriert seit: 20. Mai 2008
25 Beiträge
 
Delphi 2010 Professional
 
#7

AW: Kamerafahrt über ein Bild realisieren

  Alt 30. Dez 2014, 13:13
Was du realisieren möchtest, benötigt keine speziellen Animationskenntnisse, sondern eine Scrollbox, in die du dein TImage legst, selbiges auf AutoSize stellst, Left und Top des TImage auf 0 stellst und ein Bild hineinlädst. Durch das Property AusoSize paßt sich das TImage der Bildgröße automatisch an. Ist das TImage nun größer als der Clientbereich der Scrollbox, erscheinen in selbiger Scrollbalken, mit denen du Ausschnitte des Bildes anzeigen kannst – wie in jedem Mal- und Grafikprogramm üblich.
Das wäre natürlich eine Option. Ich befürchte nur, dass das noch langsamer wäre als das was ich bisher habe.

Was du hier erstmal optimieren kannst, ist das Bild aufzuteilen ... dann sind keine Operationen auf "große Datenmengen" nötig und es kann schneller ablaufen.
Warum jedesmal all 70 MP verarbeiten, wenn man doch nur maximal 2 MP davon braucht? Je menr Daten man verarbeiten muß, um so langsamer wird es.
Das ist richtig. In meinen bisherigen Tests habe ich auch nur 6MP Bilder verwendet, und auch das ist alles andere als flüssig.

Auch hängt es von den Zoommechianissmen an, denn es gibt Langsamere und Schnellere, aber dank vorberechnerer Zwischenbilder kann man auch da schneller arbeiten.
Sieh dir mal Google-Maps und Dergleichen an.
Dort gibt es das Bild in kleineren Stücken und vorallem schon fertig in verschiedenen Größen/Zoomstufen.
So brauch man nicht mehr all zu stark zoomen, da man bei großen Zoomstufen bereits auf ein kleineres Bild zugreifen kann.
und man braucht auch nur die Bildausschnitte zu behandeln, welche überhaupt sichtbar sind.
Die verschiedenen Interpolations-Modi kenne ich. Das mit dem Aufteilen in Kacheln ist eine gute Idee. Bevor ich mir darüber Gedanken machen kann, muß ich es aber erstmal halbwegs performant für kleinere Bilder hinbekommen.

Die Bilder können übrigens bis zu 70 MP groß sein...
Das ist wohl der Knackpunkt. Vorschlag: Zerhacke das Bild in viele kleine Kacheln in einer handlicheren Größe wie 512×512 Pixel und zeichne nur die Kacheln, die gerade im sichtbaren Bereich liegen. Um unterschiedliche Zoomstufen zu unterstützen, halte Kacheln in verschiedenen Detailstufen vor (vgl. https://de.wikipedia.org/wiki/Mip_Mapping)
Die Technik kennst du von Google Maps.
Jep. Werde ich, wenn ich die Performance für kleinere Bilder hinbekommen, mal ausprobieren.

Die eigentliche Frage ist doch:
Woher kommen die Bewegungs- und Zoomdaten?
Willst Du das "OnTheFly" berechnen oder einen Film davon erzeugen?
Mavarik
Das ist eigentlich weniger das Problem. Die Bewegungen sind relativ simpel und ich würde die on-the-fly berechnen.

Die 70 MP machen einen ja fertig? Wenn du nur Delphi Werkzeuge verwenden willst: z.B. das Bild in eine Metafile erträglicher Größe umwandeln und dann ganz klassisch zoomen. Scrollbox, Paintbox rein, Paintboxabmessungen aus dem Zoom setzen und ein Strechdraw der Metafile in Paintboxpaint. Die Scrollbox ggf. doublebuffered setzen. Um einen Punkt zommen ist etwas tricky, geht aber. Ich hab hier zum Teil DIN A0 Pläne (ca. 15 MP), da geht's so sehr gut.
Das ist vermutlich nicht performant genug. Ich werds aber einfach mal ausprobieren.

Im Grunde soll das sowas ähnliches werden wie die Lockscreen-Slideshow von Windows 8, falls die jemand kennt.

Was ich bisher versucht habe:
- Timergesteuert auf die Zeichenfläche des Formulars zeichnen. Das flackert und ist träge.
- Zeichnen in OnPaint des Formulars und timergesteuert das Formular invalidieren. Das flackert nicht, ist aber sehr träge.
- Zeichnen in OnPaint des Formulars und in OnPaint das Formular invaldiieren. Das flackert nicht, ist aber sehr träge und ist vermutlich generell keine so gute Idee ;P

Mein eigentliches Problem ist also primär, dass ich nicht weiß wie ich es hinbekomme, ein Control so upzudaten, dass die "Animation" flüssig aussieht.
  Mit Zitat antworten Zitat