![]() |
Kamerafahrt über ein Bild realisieren
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... |
AW: Kamerafahrt über ein Bild realisieren
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.
|
AW: Kamerafahrt über ein Bild realisieren
Zitat:
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. :zwinker: 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. |
AW: Kamerafahrt über ein Bild realisieren
Zitat:
![]() Die Technik kennst du von Google Maps. |
AW: Kamerafahrt über ein Bild realisieren
Die eigentliche Frage ist doch:
Woher kommen die Bewegungs- und Zoomdaten? Willst Du das "OnTheFly" berechnen oder einen Film davon erzeugen? Mavarik |
AW: Kamerafahrt über ein Bild realisieren
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.
|
AW: Kamerafahrt über ein Bild realisieren
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
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. |
AW: Kamerafahrt über ein Bild realisieren
OpenGL
|
AW: Kamerafahrt über ein Bild realisieren
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.
|
AW: Kamerafahrt über ein Bild realisieren
Liste der Anhänge anzeigen (Anzahl: 1)
@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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:22 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz