Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Prism Zeichnen auf Video? (https://www.delphipraxis.net/90062-zeichnen-auf-video.html)

Quetzalcoatl 11. Apr 2007 21:48

Re: Zeichnen auf Video?
 
Danke für die Antwort.
Das mit dem Panel drüberlegen hab ich auch probiert. nur wird dann das Video einfach über das Panel drübergemalt, kann man irgendwas machen, das das 2. Panel immer über dem andern ist?
Eine andere Möglichkeit die auch funktioniert, ist ein 2.Form aufzumachen und das Transparent zu machen und genau über das Video zu setzen. Damit kann man dann auf das Video zeichnen. Nur.. wenn ich dann wieder auf das erste Form klicke, verschwindet das 2. wieder in den Hintergrund... kann man da was machen? also im Prinzip sowas wie Form2.showModal, sodass das 2. Formblatt immer über dem ersten ist, nur das man das erste auch noch benutzen kann?
Besser wäre natürlich wenn man ein 2.Panel irgendwie dazubekommen könnte grundsätzlich über dem ersten zu sein..

Edit:
Das mit dem Form2 im Vordergrundhalten hat sich erledigt: Form2.FormStyle := fsStayOnTop;
Ich bin heut wohl bissl zu schnell mit Fragen ;)
Mit den Panels wäre es trotzdem schöner...

Achja und ich hab schon wieder ne Frage.. Ist es eigentlich möglich ein video größer zu machen? und überhaupt die Größe des Videos rauszufinden und sowas?

Sunlight7 11. Apr 2007 23:14

Re: Zeichnen auf Video?
 
Zitat:

Zitat von Quetzalcoatl
Achja und ich hab schon wieder ne Frage.. Ist es eigentlich möglich ein video größer zu machen? und überhaupt die Größe des Videos rauszufinden und sowas?

Delphi-Referenz durchsuchenDisplayRect, Hier im Forum suchenDisplayRect ;)

Irgendwie hab ich immer noch net raus, was Du genau vor hast :gruebel:

Quetzalcoatl 12. Apr 2007 00:02

Re: Zeichnen auf Video?
 
Perfekt ^^ das is genau was ich gesucht hab, danke...
so dann sollte das soweit, mit dem umweg über das zweite Formblatt gehen..
Öh, was ich genau will hab ich nich gesagt stimmt.. weil dann lacht ihr mich ja alle aus ^^
Im Prinzip gehts um Motion Capturing. Also Ich glaub ja nich das das so ganz einfach möglich ist,
im Moment gehts mir auch mehr um das Prinzip. Also ich hab ein Video, wo ich mit Tischtennisbällen an den Gelenken ne Bewegung mache ^^. Dann fängt das Programm an: zuerst werden an verschiedenen Stellen im Video vom Benutzer die Bälle markiert. Es wird ein Rechteck draufgesetzt. So an 6 Stellen oder sowas. Dann werden alle Stellen (also alle Punkte in jedem Rechteck) analysiert auf die Farbe hin und dann ein Mittelwert gebildet, sodass ich die Farbe von den Bällen habe. Dann kommt der nächste Schritt:
Das Video wird abgespielt und wo die Aufnahme starten soll wird gestoppt und es werden die Bälle in diesem einem Frame markiert (wird dann ein roter Kringel drumgemalt). Jetzt wird das video weitergespielt und es werden immer wieder mittels der Referenzfarbe vom Anfang die Bälle gesucht und der Kringel entsprechend nachgeführt.
Darum gehts erstmal. hab das in nem Basic-Dialekt mal programmiert, die Nachführung der Bälle hat sogar funktioniert, das Problem lag höchstens in der Videoqualität. hab halt nur ne Digitalkamera mit 320x240 oder so. Und jetzt will ich das in Delphi schreiben weil mit dem Basic-Dialekt den ich hatte (DarkBasicPro) ist das immer so aufwendig eine ordentliche Umgebung zu schaffen, sprich Buttons usw.
Der nächste Schritt wäre dann die Positionen bzw. Rotationen der Gelenke in irgendein vernünftiges Animationsformat was ich mir noch ausdenken müsste zu packen (wäre dann für 3D-Objekte mit Limbs).. Der Schritt wird wohl bissl schwierig für mich werden und daran wirds wohl dann auch scheitern, aber ich hab schon Spass am Nachführen der Tischtennisbälle ^^ Ein anders Problem ist dann ja auch noch, dass ich mit einer Kamera so ja erstmal auch keine Dreidimensionalität erzeugen kann.. aber was solls ^^
Entschuldigung für den Roman, und danke für eure Hilfe soweit,
Quetzalcoatl

Mackhack 12. Apr 2007 02:09

Re: Zeichnen auf Video?
 
Motion Capturing Algorithmus in C#

Quetzalcoatl 12. Apr 2007 11:19

Re: Zeichnen auf Video?
 
jo um sowas gehts im Prinzip, nur das mir der Algorithmus so nicht weiterhilft, weil der das ganze sich bewegende Objekt registriert und ich ja die Gelenke suche..

Light 12. Apr 2007 13:38

Re: Zeichnen auf Video?
 
Hi Quetzalcoatl,

also ich finde die Idee nicht zum auslachen!
weil du weißt ja selbst (hast es ja auch extra so geschrieben)
das es irgendwo dann verdammt schwierig wird ;-)

Aber so um ein Bisschen mit Video zu experimentieren ists doch klasse!

Hab mal ne Programm geschrieben was ne WebCam eingelesen hat (fremdkomponente *g*)
und dann damit nen bisschen grundlegende Video "Manipulation" ausprobiert...
also negative und co *g*
aber nicht live weil schon alle 10sec ein Bild bearbeiten über Canvase sehr viel
Rechenzeit beansprucht^^

Und ich hab mal versucht so ein "Arlarm-Programm" zu machen - also einfach ein Bild definiert und dann so schnell wie möglich halt jedes neue bild mit dem Vorgaben Bild verglichen und bei zu vielen Abweichungen ne Meldung ausgegeben -
Klingt ja eigentlich einfach - ich musste aber feststellen das so ne Webcam sehr Stark rauscht -
also da schon ohne das sich das licht und irgendwas in dem Raum verändert - sehr starke Schwankungen Vorgabenbild auftreten...
macht aufjedenfall Spaß damit zu Spielen/Experimentieren....

nur momentan bin ich schlichtweg zu geizig mir ne neue Webcam zu kaufen nur weil die alte unter XP nich mehr läuft....

Leuchtende Grüße

Stefan

dizzy 12. Apr 2007 16:12

Re: Zeichnen auf Video?
 
Um dem Timer-Gekrampfe mal ein Ende zu bereiten: TMediaplayer sowie viele andere Videoabspielkomponenten zeichnen nicht einfach auf nem Canvas rum, sondern nutzen ein Fensterhandle als Anhaltspunkt dafür, wo das Overlay hin platziert werden soll. Overlay bedeutet dabei, dass dieser Teil des Bildes komplett an der normalen Windows-Grafik vorbei läuft, und man nicht über die üblichen Methoden an die Bilddaten heran kommt, bzw. sie bearbeiten kann. Im Falle des Mediaplayers handelt es sich dabei um ein DirectX Overlay, und an das zu kommen ist echt nicht trivial (gab es auch mal einige Diskussionen zu im Forum, bezogen auf 3D-Spiele. Da ists das selbe Problem.)
Die einfachste Variante ist es, garkeine Playerkomponente an sich dafür zu bemühen, sondern sich die Bilddaten Frameweise aus der Datei zu holen. Um dies zu tun, kann man sich ewig mit der API für Videocodecs beschäftigen, oder man nimmt z.B. Hier im Forum suchenDSPack dafür :). Damit lässt sich ein komplettes Video in Bitmaps zerlegt bearbeiten, und je nach dem wie schnell dies von statten geht, kann man nun noch selbst für die Anzeige sorgen. (Alternativ halt wieder mit dem DSPack ein zweites Video encodieren mit den Änderungen.)

Jeder Versuch einfach so auf ein Video zu zeichnen, wird im aller besten Fall flackern wie Hölle, wenn überhaupt ;)

Sunlight7 12. Apr 2007 17:54

Re: Zeichnen auf Video?
 
Zitat:

Zitat von dizzy
Um dem Timer-Gekrampfe mal ein Ende zu bereiten: TMediaplayer sowie viele andere Videoabspielkomponenten zeichnen nicht einfach auf nem Canvas rum, sondern nutzen ein Fensterhandle als Anhaltspunkt dafür, wo das Overlay hin platziert werden soll. Overlay bedeutet dabei, dass dieser Teil des Bildes komplett an der normalen Windows-Grafik vorbei läuft, und man nicht über die üblichen Methoden an die Bilddaten heran kommt, bzw. sie bearbeiten kann. Im Falle des Mediaplayers handelt es sich dabei um ein DirectX Overlay, und an das zu kommen ist echt nicht trivial (gab es auch mal einige Diskussionen zu im Forum, bezogen auf 3D-Spiele. Da ists das selbe Problem.)

Du verwechselt den TMediaPlayer (MCI) mit dem Windows MediaPlayer (DirectShow).
MCI nutzt die Standard GDI, DirectX gabs in Win 3.x noch gar net. :zwinker:
DirectShow nutzt Overlays, aber nur wenn sie nicht deaktiviert wurden... :angel2:

Zitat:

Zitat von dizzy
Jeder Versuch einfach so auf ein Video zu zeichnen, wird im aller besten Fall flackern wie Hölle, wenn überhaupt

Denkste, mein Player zeichnet auf ein Video (indirekt), um Titel und Interpret anzuzeigen, ohne Flimmern :stupid: Guckste
Wenn man sich in den Draw-Handler einklinkt geht das auch direkt, war mir aber zu mühsam :roll:

@Quetzalcoatl: Du kannst es mit wie es dizzy beschrieben hat ohne Player machen, oder es, wo Du es schon mit dem MediaPlayer versuchst es auf ein Panel abspielen lassen und dieses bei jedem MCI Signal in ein Bitmap zu Capturen, womit Du dann mit ScanLine schneller zugreifen kannst.
Obwohl ich dazu sagen muß, so ist es einfacher zu Programmieren, aber benötigt auch etwas mehr Rechenzeit der CPU...

Quetzalcoatl 13. Apr 2007 01:01

Re: Zeichnen auf Video?
 
So, schon wieder ne Frage:
ich versuche gerade die Position des Videos über ne Trackbar verstellbar zu machen.
Also Die Trackbar soll wenn Play gedrückt wird mitlaufen.. Soweit kein Problem, hab in nem Timer einfach:
Trackbar1.Position:=MediaPlayer1.Position;
Nur sollte man über die Trackbar auch selber noch eine beliebige Position einstellen können. Das hatte ich auch schonmal am Laufen, aber immer nur das eine oder das andre. also entweder die Trackbar läuft schön mit dem video oder ich kann selber die position über die trackbar verstellen.. Wie krieg ich jetzt beides zusammen?
Oder gibts was um zu prüfen ob das Video grad läuft, dass man halt "Trackbar1.Position:=MediaPlayer1.Position;" nur dann macht wenn play gedrückt wurde?

Danke für jede Hilfe,
Quetzalcoatl

Sunlight7 13. Apr 2007 02:27

Re: Zeichnen auf Video?
 
Schau mal nach Delphi-Referenz durchsuchenTMediaPlayer.Mode

Du könntest das auch so einbauen, das Du in der TrackBar.OnChange guckst, ob die den Fokus hat, nur so ne Schnapsidee am Rande :stupid:

Delphi-Quellcode:
If TrackBar1.Focused then
   MediaPlayer1.Position:=TrackBar1.Position else
      TrackBar1.Position:=MediaPlayer1.Position;


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:05 Uhr.
Seite 2 von 4     12 34      

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