AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Fmx: Screenshot vom TMediaPlayerControl
Thema durchsuchen
Ansicht
Themen-Optionen

Fmx: Screenshot vom TMediaPlayerControl

Ein Thema von Rollo62 · begonnen am 14. Jan 2016 · letzter Beitrag vom 18. Jan 2016
Antwort Antwort
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#1

Fmx: Screenshot vom TMediaPlayerControl

  Alt 14. Jan 2016, 17:23
Hallo zusammen,

ich habe mich ein wenig mit TMediaPlayer unf TMediaPlayerControl beschäftigt, aber ich finde keine
Möglichkeit einen Screenshot davon zu machen.
Hier auch ähnliches Ergebnis
http://stackoverflow.com/questions/1...control-in-fm2

Echt CrossPlatform:
Für einen Hinweis für echte Platformunabhängige Variante, vielleicht so so wie SampleBufferToBitmap
bei dem VideoCapture, wäre ich sehr dankbar.

Windows HWND Lösung:
Mir würde momentan auch erstmal die reine Windows-Lösung ausreichen:
Mit einigen Hacks auf die private members bekomme ich ein HWND von dem DirectX Fenster,
in dem der Renderer (hoffentlich) zu kopieren scheint.

Wie kann ich nun aber mit diesem HWND unter FMX (Rx10 Seattle) weiterarbeiten ?
Kann ich mit dem HWND ein Fmx-Fenster erzeugen, und davon dann einfach mit MakeScreenshot ein TBitmap kopieren ?
Kann ich den Fensterinhalt vom HWND über HDC in ein FMX.Graphics.TBitmap kopieren ?
Zusammen mit HWND finde ich eigentlich nur etwas zu VCL.Graphics.TBitmap, und das ist wohl nicht kompatibel zu FMX,
obwohl ich es kompilieren kann.

Über reine Windows Funktionen scheint es möglich zu sein,
HWND -> HDC -> tagBITMAP, aber am Ende bräuchte ich daraus wieder als FMX-Bitmap.

Gibt es da vielleucht einen eleganten Weg, und kann ich die HWND und Vcl überhaupt zusammen
mit FMX mischen ohne auf die Nase zu fallen ?

EDIT:
Ich habe einen guten Hinweis hier gefunden !
So geht der Weg von Vcl zu Fmx

Aber leider bekomme ich das VideoBild doch nicht, sondern nur den Hintergrund.
Vielleicht ist es doch nicht das richtige Handle, oder es ist nur ein unsichtbares Fenster ?

Ich hole mir das Handle von hier:
Code:
function TMyMediaPlayerControl.DoMakeScreenshot : FMX.Graphics.TBitmap;
var
  P: TPointF;
  R: TRect;
  Bounds: TRectF;
  Form: TCommonCustomForm;
  mpa: TMediaPlayerControl_Accessor;
  ma: TMediaPlayer_Accessor;
  wma: TWindowsMedia_Accessor;

begin

  Result := nil;

  mpa := TMediaPlayerControl_Accessor(Self);

  if (mpa.FMediaPlayer <> nil) and (mpa.FMediaPlayer.Media <> nil) then
  begin
    ma := TMediaPlayer_Accessor( mpa.FMediaPlayer );
    if Assigned( ma ) then
    begin
      wma := TWindowsMedia_Accessor( ma.FMedia );
      if Assigned( wma ) then
      begin
        Result := FMX.Graphics.TBitmap.Create;

        MakeScreenshot_FromHWND(wma.FWnd, Result ); // siehe Methode vom Link oben, Austausch über TMemoryStream

      end;

    end;
  end;

end;

EDIT2:
Das HWND Handle war richtig, denn für das Abnehmen der DirectX-Bildinfo funktioniert diese Methode:
https://villavu.com/forum/showthread.php?t=108664

Allerdings muss man den Mode DirectX, statt der empfohlenen DDraw benutzen.
Damit kann ich wirklich vom echten Hilfswindow einen Screenshot machen, und die Größe hängt vom Window ab, nicht vom
Video selbst.
DirectX rendert und skaliert das schön da rein, und der Screenshot holt das Bild wieder heraus.

Genau das was ich brauche.
Das Mischen Vcl:TBitmap und Fmx:TBitmap macht bis jetzt auch keine Probleme, das Kopieren weiterhin wie oben
über TStream.Copy.

Bleibt noch die Frage: Geht es auch eleganter, nur mit FMX Hausmitteln, ohne über den VCL Zwischenschritt ?
So dass ich nicht nur DirectX, sonder am Besten auch OSX, iOS, Android nutzen kann ...

Rollo






Rollo

Geändert von Rollo62 (14. Jan 2016 um 21:05 Uhr) Grund: Update, mehr Info
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#2

AW: Fmx: Screenshot vom TMediaPlayerControl

  Alt 18. Jan 2016, 14:03
Räusper

Hat denn noch gar niemand sich mit VideoPlayer CrossPlatform beschäftigt ?

Ich würde ja auch die PasLibVLC benutzen, aber das bekomme ich auch nicht so ohne weiteres auf FMX ans Laufen.
Da gibt es zwar ein XE7 + OSX Demo, aber es fehlt irgendwie die Sourcen dazu (oder bin ich zu Blind das zu finden) ?

LibVLC wäre natürlich auch super, weil es einfach alles abspielt, aber ob die Lizenzen dazu OK sind muss ich mir
noch ansehen.
Trotzdem sollte es doch eigentlich auch mit Hausmitteln unter FMX gehen, also DirectX unter Win, wasauchimmer unter OSX, etc.

Also wohlgemerkt, unter VCL ist ja alles kein Thema, aber unter FMX bekomme ich es noch nichteinmal unter Windows ans Laufen ohne Verrenkungen.
Hat da vielleicht mal jemand einen kleinen Schubser für mich in die richtige Richtung (falls es sowas gibt) ?

Rollo
  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 06:07 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