AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeichnen auf Video?

Ein Thema von Quetzalcoatl · begonnen am 11. Apr 2007 · letzter Beitrag vom 14. Apr 2007
Antwort Antwort
Seite 3 von 4     123 4      
Benutzerbild von dizzy
dizzy

Registriert seit: 26. Nov 2003
Ort: Lünen
1.932 Beiträge
 
Delphi 7 Enterprise
 
#21

Re: Zeichnen auf Video?

  Alt 13. Apr 2007, 06:24
Zitat von Sunlight7:
Du verwechselt den TMediaPlayer (MCI) mit dem Windows MediaPlayer (DirectShow).
MCI nutzt die Standard GDI, DirectX gabs in Win 3.x noch gar net.
Leuchtet ein, in der Tat - ich geb mich geschlagen =)
Zitat von Sunlight7:
DirectShow nutzt Overlays, aber nur wenn sie nicht deaktiviert wurden...
Wer würde soooowas denn tun?

Zitat von Sunlight7:
Denkste, mein Player zeichnet auf ein Video (indirekt), um Titel und Interpret anzuzeigen, ohne Flimmern Guckste
Wenn man sich in den Draw-Handler einklinkt geht das auch direkt, war mir aber zu mühsam
Muss ich mir mal anschauen. Ich nehme aber mal an, dass du es dann via TMediaPlayer gemacht hast? Wenn es aber ein Overlay ist, so hast du meine volle Aufmerksamkeit 8)

Zitat von Sunlight7:
@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...
Dann ists ja schon fast egal wie rum man es macht. Bei der Variante übern Player müsste man dann zusehen, dass die Bearbeitung mit der Framerate einigermaßen mithalten kann, und bei der anderen Variante hat man die Framerate selber voll unter Kontrolle, was natürlich mit etwas mehr Arbeit bei der Anzeige verbunden ist. Für akkurates Motioncapturing würde ich eher keinen Player nehmen (ausser man lässt ihn quasi als Decoderknecht in Einzelschritten laufen), da die Verarbeitung idR nicht soooo fix geht, je nach gewünschter Güte des Ergebnisses. Wenn man eher einfache Dinge tun will, wie z.B. nur feststellen ob sich generell das Bild ändert o.ä., dürfte ein Player aber komfortabler sein. Damit wirds dann, wie so oft, eine Frage von "Was will ich im Detail tun, und womit fühl ich mich wohler" =)
Fabian K.
INSERT INTO HandVonFreundin SELECT * FROM Himmel
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#22

Re: Zeichnen auf Video?

  Alt 13. Apr 2007, 06:55
Zitat von dizzy:
Wer würde soooowas denn tun?
Leute, die in ihrem 4x86er PC eine Local VESA Bus Grafikkarte haben, die nur DirectDraw 1 kann, für Overlays es aber DirectDraw 2 braucht

Zitat von dizzy:
Ich nehme aber mal an, dass du es dann via TMediaPlayer gemacht hast?
Sunlight7 hat in einem anderen Thread folgendes geschrieben:
Gelegentlich gibt die Eigenschaft .Mode vom TMediaPlayer Werte aus, die gar net in den TMPModes vorhanden sind

Solltest Du also das machen, wie es das Beispiel in der OH zeigt kannst Du schon mal einen Crash erleben.

Ähm ne, ich hab mir ne eigene Kompo gebastelt, die MCI direkt anspricht, die TMediaPlayer Kompo hat mich zu sehr genervt und MCI bietet vielmehr Funktionen, als sie der TMediaPlayer anbietet.


Zitat von dizzy:
Dann ists ja schon fast egal wie rum man es macht. Bei der Variante übern Player müsste man dann zusehen, dass die Bearbeitung mit der Framerate einigermaßen mithalten kann, und bei der anderen Variante hat man die Framerate selber voll unter Kontrolle, was natürlich mit etwas mehr Arbeit bei der Anzeige verbunden ist. Für akkurates Motioncapturing würde ich eher keinen Player nehmen (ausser man lässt ihn quasi als Decoderknecht in Einzelschritten laufen), da die Verarbeitung idR nicht soooo fix geht, je nach gewünschter Güte des Ergebnisses. Wenn man eher einfache Dinge tun will, wie z.B. nur feststellen ob sich generell das Bild ändert o.ä., dürfte ein Player aber komfortabler sein. Damit wirds dann, wie so oft, eine Frage von "Was will ich im Detail tun, und womit fühl ich mich wohler" =)
MCI bietet da die Möglichkeit, bei jedem Frame ein Signal zu bekommen, bzw. kann man die Wiedergaberate herabstellen, sollte es die CPU net schaffen.
Net das optimalste, aber mal was zum rumspielen und probieren
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Benutzerbild von Light
Light

Registriert seit: 3. Feb 2006
Ort: Paderborn NRW
123 Beiträge
 
Turbo Delphi für Win32
 
#23

Re: Zeichnen auf Video?

  Alt 13. Apr 2007, 12:53
Hi Ihr,

MCI - ja es bietet viiiiiieeeeeeellllle Möglichkeiten -
aber nur wenn man weiß wies funktioniert

- Ich hab mal den TMediaPlayer so umgeschrieben bzw. erweitert
das man noch einstellen konnte welche Soundkarte er Nutzen soll -
(falls mehrere Installiert sind...)
So als "DJ-Player" dann halt mit zwei Playern und einem zum Vorhören die dann erst am Mischpult gemixt werden sollen und nicht automatisch....

es hat irgendwann auch mal so einigermaßen Funktioniert - allerdings nur mit Wavdateien
da der TMediaPlayer dann für MP3 immer ja den umweg übers deCodieren macht...
und da hab ich dann immer nur ne schöne Fehlermeldung bekommen
ala "Dieser Befehl wird von Diesem Medium nicht unterstützt!"

und ich musste mich sehr sehr lange durch die OH schlagen und
hier in der DP suchen bis ich überhaupt mal einen blassen schimmer
davon hatte wie das funktioniert...
.. ist auch schon ein bisschen länger her

Leuchtende Grüße

Stefan
Stefan
  Mit Zitat antworten Zitat
Quetzalcoatl

Registriert seit: 11. Apr 2007
30 Beiträge
 
#24

Re: Zeichnen auf Video?

  Alt 13. Apr 2007, 15:11
Hi, Also die Trackbar funktioniert jetzt soweit: Wenn das Video spielt wird halt da mitgeschoben und wenn es nicht spielt kann man selber den Schieber bewegen... Ich komm immer nie auf die Funktionen wie z.b. Focused oder das mit dem MediaPlayer.Mode=mpPlaying.. is für mich nich so intuitiv im Moment ^^ ich kenn nur von Basic: if video Playing() ^^ Da konnte man einfach schreiben was man wollte ^^
Und mir kommt es so vor als würde die Delphihilfe mir auch nich alle Befehle ausspucken -.-

argh und da is schon wieder ein Problem.. Ich muss ja zwangsläufig die RGB Werte eines Pixels auf dem Video rausfinden können.. mit Canvas.Pixels scheint das irgendwie nich zu funktionieren, bleibt das Canvas wohl unberührt von dem Video? Ich find einfach keine Funktionen sonst die mir Pixeldaten geben.. hm..
  Mit Zitat antworten Zitat
Benutzerbild von Light
Light

Registriert seit: 3. Feb 2006
Ort: Paderborn NRW
123 Beiträge
 
Turbo Delphi für Win32
 
#25

Re: Zeichnen auf Video?

  Alt 13. Apr 2007, 15:45
Hi,

durchforste doch mal selbst die Eigenschaften des TMediaPlayer und vieleicht gibts da irgendwie ein Handel zur eigentlichen Zeichenfläche - weil scheinbar gibt er es ja nicht direkt auf dem Canvas wieder-

aber wie du aus dem TColor Wert die RGB Werte raus bekommst weist du?

Leuchtende Grüße

Stefan
Stefan
  Mit Zitat antworten Zitat
Quetzalcoatl

Registriert seit: 11. Apr 2007
30 Beiträge
 
#26

Re: Zeichnen auf Video?

  Alt 13. Apr 2007, 16:58
HI..
also als ich mit Canvas.Pixels die Farben gesucht hab, hab ich die jeweiligen Werte versucht mit GetRValue GetgValue und GetBValue die einzelnen Farbwerte gesucht..
Dann gibts ja da scheinbar noch eine Funktion GetPixel(hdc, nxpos,nypos).. Die gibt mir auch einen Farbwert und mit GetRValue usw. kann ich offensichtlich auch die einzelnen Komponenten rausfinden.. nur.. das klappt bei mir bisher noch nicht auf dem Video.. wobei ich auch nicht so recht weiß was bei 'hdc' hin muss. Also ich hatte diesen Codeschnippsel dazu gefunden:
Delphi-Quellcode:
    dc := GetDC(0);
    r := GetPixel(dc, Mouse.CursorPos.x, Mouse.CursorPos.Y);
    ReleaseDC(0, dc);
  Mit Zitat antworten Zitat
Benutzerbild von Light
Light

Registriert seit: 3. Feb 2006
Ort: Paderborn NRW
123 Beiträge
 
Turbo Delphi für Win32
 
#27

Re: Zeichnen auf Video?

  Alt 13. Apr 2007, 18:11
Hi Quetzalcoatl,

also h steht meist für handel
und DC würde ich jetzt mal mit Device Context oder so was übersetzen.
also ist das das Handel für die Fläche wo er den Pixel her nehmen soll!

also genau das was du willst!

Jetzt musst du nur noch das handel von der Oberfläche haben wo der Film
drauf läuft^^

Ich tippe mal das GetDC(0) dir das Handel deiner Form oder so in der Richtung zurückliefert.

Notfalls der Bildschirm
allerdings musst du dann halt erst mal noch den Ausschnitt errechnen wo dein Video überhaupt läuft...

hoffe dir helfen zu können!

Leuchtende Grüße

Stefan

PS: Falls ich mich Irre dann bitte ich dringend um Berichtigung - ich will was lernen^^
PPS: Wieso ich das mit dem DC weiß bzw. woher? --> bei OPEN GL muss man auch den DC angeben damit er weiß wo er hinmalen soll!
Stefan
  Mit Zitat antworten Zitat
Benutzerbild von Sunlight7
Sunlight7

Registriert seit: 17. Sep 2006
Ort: Sonnensystem, Zentral
1.522 Beiträge
 
Delphi 5 Standard
 
#28

Re: Zeichnen auf Video?

  Alt 13. Apr 2007, 18:46
Da mein Beitrag von 15:40 Uhr verschwunden is Nochmals...

Mit Canvas.Pixels würd ich das sowieso net machen, das ist extra langsam X-D

Ich weiß jetzt grad net, welche Delphi Version Du hast, jedenfalls haben Panels bei mir kein Canvas, deshalb habe ich mit MSDN-Library durchsuchenGetDC und MSDN-Library durchsuchenBitBlt einen Schnappschuß gemacht. Screenshot
Dann kannst Du es mit Hier im Forum suchenScanLine auf einer Bitmap weiter bearbeiten.

@Light: GetDC(0) gibt ein Device Context vom Desktop, nicht vom Fenster
Windows: Ja - Microsoft: Nein -> www.ReactOS.org
  Mit Zitat antworten Zitat
Quetzalcoatl

Registriert seit: 11. Apr 2007
30 Beiträge
 
#29

Re: Zeichnen auf Video?

  Alt 13. Apr 2007, 22:12
Hi,

Also mit GetDC(0) krieg ich doch theoretisch dann vom ganzen Bildschirm die Pixeldaten? klappt auch, solange kein Video geladen ist. wenn ich das Video auf dem Panel habe, funktioniert die Funktion nich mehr (nur auf dem Panel nicht) bzw. gibt konstante Werte aus, was aber nicht passen kann.
Wie krieg ich denn das Handle von der Oberfläche wo der Film drauf läuft. Habs mit MediaPlayer1.Display.Handle und solchen sachen probiert, aber kommt nix komischer weise.. Theoretisch müsste das doch mit GetDC(0) gehen, funktioniert doch bei allem andern auch, sogar außerhalb des Programms. Wenn ich nebenbei dasselbe Video vom WindowsMediaPlayer, also extern abspielen lasse klappt das mit dem GetPixel perfekt.

Hat grad sogar zwischen durch mal in meinem Programm selbst funktioniert, woran das lag hab ich nich rausgefunden, jetzt gehts auf jedenfall nicht mehr.. irgendwie ist das komisch.
  Mit Zitat antworten Zitat
Benutzerbild von Light
Light

Registriert seit: 3. Feb 2006
Ort: Paderborn NRW
123 Beiträge
 
Turbo Delphi für Win32
 
#30

Re: Zeichnen auf Video?

  Alt 13. Apr 2007, 22:32
Hm,

also tut mir sehr leid-
mehr weiß ich leider auch nicht-

überleg genau was war als es funktioniert hat^^

vielleicht war irgend ein anderes Programm "schuld"

Leuchtende Grüße

Stefan

PS: mich würde es schon Interessieren wie es dann funktioniert...
Stefan
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 20:03 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