AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Bitmap mit Mediaplayer Display füllen
Thema durchsuchen
Ansicht
Themen-Optionen

Bitmap mit Mediaplayer Display füllen

Ein Thema von Christian Seehase · begonnen am 10. Aug 2002 · letzter Beitrag vom 28. Mär 2005
Antwort Antwort
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#1

Bitmap mit Mediaplayer Display füllen

  Alt 10. Aug 2002, 03:44
Moin Zusammen,

ich habe mal angefangen ein wenig mit Graphik zu experimentieren, und suche nun nach einer Erklärung für folgendes Problem.

Vorab:
Code:
TMediaPlayer.Display = frmDisplay
Die Zeile

Code:
bmpWork.Canvas.CopyRect(frmDisplay.ClientRect, frmDisplay.Canvas, frmDisplay.ClientRect);
funktioniert, wenn der Mediaplayer nicht geöffnet ist.
Wird aber etwas dargestellt so ist die Bitmap hinterher ausschliesslich schwarz.

Warum

Meine bislang einzige Erklärung:
TMediaPlayer.Display nutzt nur den äusseren Rahmen des angegebenen WinControls, aber nicht dessen Oberfläche, zeichnet also gar nicht auf dieser. Sie wird nur als "Grundfarbe" geschwärzt.
Dann bliebe wohl als Workaround nur noch ein Screenshot (MCI_CAPTURE wird als "unsupported" nicht ausgeführt)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#2
  Alt 10. Aug 2002, 10:00
Hi Christian,

das könnte daran liegen, dass der MCI-Treiber vielleicht zwecks flimmerfreiem und möglichst schnellem Bild per DirectDraw auf diese Oberfläche zeichnet, von dem Bild ließe sich dann nicht so einfach ein Screenshot erstellen. Wie HyperSnapDX usw. aber beeisen muss es ja eine Möglichkeit geben, vielleicht ebenfalls mit DirectX, darauf zuzugreifen, ich wüsste allerdings nicht wie.

MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3
  Alt 10. Aug 2002, 13:29
Moin d3g,

danke, gute Idee, DirectX könnte ich auch mal versuchen.

Mir geht's hier ja auch nicht um eine Problemlösung, sondern, im Wesentlichen, um Ideen, wie man die Zeichenfläche des Mediaplayers anzapfen kann, bzw. den Grund warum es so wie ich es geschrieben habe nicht funktioniert.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#4
  Alt 10. Aug 2002, 19:08
Moin Zusammen,

jetzt bekomme ich aber Verständnisprobleme

Ich habe jetzt drei ScreenShot Varianten ausprobiert.
  1. Taste Druck
  2. Ausführen von ALT-DRUCK per Programm
  3. Sakuras Routine für Desktop Screenshot ohne Zwischenablage

Ergebnis:
In allen drei Fällen ist exakt der Bereich, der das Display des Mediaplayers darstellt schwarz.


Bevor ich mich jetzt auch noch auf DirectX stürze...

Hat noch jemand eine Idee?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5
  Alt 10. Aug 2002, 19:19
Wenn du Pech hast, dann läuft das Videobild im Overlay-Modus. Bei diesem wird ein Bereich mit einer bestimmten Farbe gefüllt, wobei für die Ausgabe der Bilddaten die Grafikkarte selbst verantwortlich ist. Somit steht im Bildschirmspeicher, auf den Windows nur zugreifen kann, nur die Overlay-Farbe und nur diese kannst du dann kopieren. Aber so viel ich weiß nutzt der MediaPlayer DirectShow also nicht den Overlay-Modus (wie es TV-Karten machen).
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#6
  Alt 11. Aug 2002, 00:37
Moin jbg,

danke für die Info.

Vermutlich wird das Video wohl tatsächlich im Overlaymodus dargestellt.
Dafür spricht auf jeden Fall, dass sich an der Stelle, an der sich das Video befinden sollte grundsätzlich eine schwarze Fläche zeigt.
Sobald der Mediaplayer geschlossen wird ist dem nicht so.

Was ich zusätzlich noch beobachten konnte:
Wird das Fenster mit dem Video verschoben, so verrutscht es dabei, und wird, sozusagen nachgeführt, bis es wieder im vorgesehenen Ausschnitt zu sehen ist.

Da werde ich mir wohl mal intensiver das PSDK und DDK vornehmen müssen
Vielleicht gibt's ja doch 'ne Lösung.
Ursache könnte, in irgendeiner Form, auch die vorhandene TV-Karte sein. Vor deren Installation hatte ich das alles nicht ausprobiert.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#7
  Alt 12. Aug 2002, 09:31
Hi Christian,

an der TV-Karte liegt's nicht, ich habe nämlich keine und es funktioniert trotzdem nicht. Wenn man unter Linux die libmpeg2 benutzt, kommt es zu den gleichen Effekten. Vielleicht kannst du dir ja mal den Sourcecode davon anschauen: http://libmpeg2.sourceforge.net/ (gibts auch im CVS, Server steht auf der Seite).

MfG,
d3g
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8
  Alt 27. Jun 2003, 17:29
Moin Zusammen,

ich hab' inzwischen noch mal experimentiert.
Ein Screenshot von Virtual Dub tut's problemlos, was mich vermuten lässt, dass dort kein Mediaplayer verwendet wird. (In den Sourcen konnte ich auch nichts entsprechendes finden)

Dann fiel mir zufällig auf, dass ein Screenshot von IrfanView auch Ok war.
Hierbei wird aber ganz offensichtlich ein über MCICreateWnd erzeugtes Fenster verwendet (für die die's interessiert: Unter W2K in der msvfw32.dll zu finden, nicht wie's im PSDK steht in der vfw32), und bei dem hatte ich das gleiche Problem.

Wiederum durch Zufall, bin ich nun darauf gekommen, dass ein Screenshot immer funktioniert, wenn das Formular einen Moment lang nicht sichtbar war.
Hat dafür jemand eine Erklärung?

So würde es gehen. Ist natürlich als Lösung indiskutabel:

Delphi-Quellcode:
  MediaPlayer1.Display := Panel1;
MediaPlayer1.Close;
  MediaPlayer1.Open;
  Panel1.Width := Mediaplayer1.DisplayRect.Right - Mediaplayer1.DisplayRect.Left;
  Panel1.Height := Mediaplayer1.DisplayRect.Bottom - Mediaplayer1.DisplayRect.Top;
  WindowState := wsMinimized;
  Application.ProcessMessages;
  Sleep(100);
  WindowState := wsNormal;
PS:
Bei der Suche bin ich auf ein Forum gestossen, in der empfohlen wurde die Hardwarebeschleunigung für die Anwendung, oder, zur Not im System abzuschalten (leider ohne Beispiel ). Dann wird kein Overlay verwendet. Dazu konnte ich dann leider für meine Geforce 2MX nichts finden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Gregg

Registriert seit: 6. Mär 2005
Ort: Schwarzenberg
33 Beiträge
 
Delphi 3 Client/Server
 
#9

Re: Bitmap mit Mediaplayer Display füllen

  Alt 28. Mär 2005, 20:05
Desktop -> Rechtsklick -> Eigenschaften -> Einstellungen -> Erweitert -> Problembehandlung
Es gibt keine Liebe auf dieser Welt.
Es ist ein Traum, der uns gefällt.
Es gibt nur Lüge, Gier und Hass,
soviele Tränen dick und nass..
  Mit Zitat antworten Zitat
Antwort Antwort


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:19 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