AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Kamerafahrt über ein Bild realisieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kamerafahrt über ein Bild realisieren

Ein Thema von flipdascript · begonnen am 29. Dez 2014 · letzter Beitrag vom 6. Jan 2015
Antwort Antwort
Seite 1 von 3  1 23      
flipdascript

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

Kamerafahrt über ein Bild realisieren

  Alt 29. Dez 2014, 13:34
Hallo zusammen!

Ich weiß nicht ob ich den richtigen Titel gewählt habe.
Ich möchte ein Programm schreiben, das in einem Fenster Bilder anzeigt die viel größer als das Fenster selbst sind.
Das ganze soll animiert werden, so dass der tatsächlich angezeigte Bereich sich ändert, quasi als würde man durch eine Kamera auf das Bild schauen und die Kamera würde sich bewegen. Es sollte auch möglich sein, den aktuellen Zoom anzupassen, so dass ein größerer Bereich des Bildes im Fenster dargestellt wird.

Mein Problem ist nun, dass ich mich mit dem Thema Animationen quasi gar nicht auskenne. Ich habe sehr gute Kenntnisse von Delphi allgemein und kenne mich einigermassen mit GDI+ aus. Meine GDI+-Erfahrung beschränkt sich aber auf statische Bilder.
Ich habe es schon ganz billig mit Timer und selbstzeichnen auf ein Control ausprobiert, das ist aber leider zu langsam. Meine Frage ist nun ob mir jemand sagen kann wie ich das am Besten realisiere oder ob es alternative Suchbegriffe nach denen ich suchen könnte. Ich finde nämlich keine brauchbare Übersetzung von Kamerafahrt und bekomme Myriaden an Tutorials wie man eine Kamera im 3D-Raum bewegt.
Vermutlich ist das der Wink mit dem Zaun und ich komme an DirectX nicht vorbei?

Die Bilder können übrigens bis zu 70 MP groß sein...
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#2

AW: Kamerafahrt über ein Bild realisieren

  Alt 29. Dez 2014, 14:07
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.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.136 Beiträge
 
Delphi 12 Athens
 
#3

AW: Kamerafahrt über ein Bild realisieren

  Alt 29. Dez 2014, 14:12
Zitat:
70 MP
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.
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (29. Dez 2014 um 14:18 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Kamerafahrt über ein Bild realisieren

  Alt 29. Dez 2014, 14:19
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.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Kamerafahrt über ein Bild realisieren

  Alt 29. Dez 2014, 14:32
Die eigentliche Frage ist doch:

Woher kommen die Bewegungs- und Zoomdaten?
Willst Du das "OnTheFly" berechnen oder einen Film davon erzeugen?

Mavarik
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Kamerafahrt über ein Bild realisieren

  Alt 29. Dez 2014, 15:20
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.
  Mit Zitat antworten Zitat
flipdascript

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

AW: Kamerafahrt über ein Bild realisieren

  Alt 30. Dez 2014, 12: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
Jens01

Registriert seit: 14. Apr 2009
670 Beiträge
 
#8

AW: Kamerafahrt über ein Bild realisieren

  Alt 30. Dez 2014, 13:04
OpenGL
Achtung: Bin kein Informatiker sondern komme vom Bau.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#9

AW: Kamerafahrt über ein Bild realisieren

  Alt 30. Dez 2014, 13:52
Was auch noch zu berücksichtigen ist: TTimer hat keine besonders feine Auflösung. Je nach dem, was für dich flüssig bedeutet, kann auch das schon der Knackpunkt sein. 60 FPS und mehr sind mit TTimer eher problematisch. Google mal nach "Game Loop" für Alternativen.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#10

AW: Kamerafahrt über ein Bild realisieren

  Alt 31. Dez 2014, 19:08
@flipdascript

Ich hab zwar nicht ganz verstanden was du brauchst, aber da ich in der letzten Zeit wenig geprogt habe und vor Ende des Jahren nochmal Delphi anwerfen wollte, habe ich etwas geschrieben. Vielleicht ist es das was du brauchst (vielleicht auch was anderes).

Das Programm ist selbsterklärend, zuerst aber ein Bild laden.
Angehängte Dateien
Dateityp: rar Fly.rar (2,5 KB, 43x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:37 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz