Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Mediaplayer Pause Screen erstellen fehlt das Bild (https://www.delphipraxis.net/171613-mediaplayer-pause-screen-erstellen-fehlt-das-bild.html)

blondervolker 15. Nov 2012 08:21

Mediaplayer Pause Screen erstellen fehlt das Bild
 
Hallo,

Ich wollte im Mediaplayer auf Pause stellen und dann mit einem
Button ein Bild erstellen und in ZW-Ablage speichern.
Die Form ist ist zwar komplett als Bild vorhanden,nur der Inhalt
des "Bildes vom Mediaplayer" is weechh...:stupid:


Hat jemand eine Idee wie das funktioniert?

Delphi-Quellcode:
procedure TForm18.AdvGlassButton11Click(Sender: TObject);
var
Bitmap:TBitmap;
begin
Bitmap:=GetFormImage;
try
Clipboard.Assign(Bitmap);
finally
Bitmap.Free;
end;
end;

DeddyH 15. Nov 2012 08:34

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Such mal nach Hier im Forum suchenMediaplayer Screenshot, da müsste sich etwas finden lassen.

blondervolker 15. Nov 2012 08:41

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Hab ich schon gesucht wie ein Blödi,noch nix gefunden...:cry:

DeddyH 15. Nov 2012 08:48

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Wie man hier lesen kann, ist das Ganze gar nicht ohne, da muss man wohl auf DirectX zurückgreifen.

EWeiss 15. Nov 2012 09:17

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Zitat:

Zitat von DeddyH (Beitrag 1191249)
Wie man hier lesen kann, ist das Ganze gar nicht ohne, da muss man wohl auf DirectX zurückgreifen.

Den muss ich beipflichten..

Es sei denn man liest die Video Datei in einen stream und greift auf das gerade abgespielte Frame zu.
Mit AVI habe ich es schon gemacht mit dem Mediaplayer dürfte das etwas komplizierter werden abhängig vom Codec
der verwendet wird beim abspielen.

gruss

blondervolker 15. Nov 2012 09:20

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Also würde das bedeuten,ich kann ein Srceen vom Frame erstellen?
Oder sehe ich das falsch?:-D

EWeiss 15. Nov 2012 09:24

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Zitat:

Zitat von blondervolker (Beitrag 1191254)
Also würde das bedeuten,ich kann ein Srceen vom Frame erstellen?
Oder sehe ich das falsch?:-D

Ja wenn du an das aktuelle frame herankommst ;)

gruss

Medium 15. Nov 2012 09:27

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Das DSPack ist recht handlich, wenn es darum geht Einzelbilder aus einem Video zu bekommen, dass einen beliebigen installierten Codec verwendet. (Die Codecs selber alle zu implementieren dürfte Mannjahre dauern.)

EWeiss 15. Nov 2012 09:31

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Zitat:

Zitat von Medium (Beitrag 1191258)
Das DSPack ist recht handlich, wenn es darum geht Einzelbilder aus einem Video zu bekommen, dass einen beliebigen installierten Codec verwendet. (Die Codecs selber alle zu implementieren dürfte Mannjahre dauern.)

Bei AVI handhabe ich das so wobei ich direkt auf das Bitmap aus dem Stream zurückgreifen kann.
Siehe ..
Delphi-Quellcode:
BMP := AVIStreamGetFrame(GetFramePointer, frame);
Delphi-Quellcode:
procedure GetAVIFrame;
var
  Frame         : Integer;
  AVIElapsedTime : DWord;
  BMP           : ^TBITMAPINFOHEADER;

begin
  // Get the elapsed time. If the elapsed time is longer than the
  // video clip, then reset the elapsed time and video start
  AVIElapsedTime :=GetTickCount() - AVIStart;
  if AVIElapsedTime > AVILength then
  begin
    AVIStart :=GetTickCount();
    AVIElapsedTime :=0;
  end;

  // Get the next frame based on the elaped time
  Frame :=AVIStreamTimeToSample(AVIStream, AVIElapsedTime);
  if Frame <> ActiveFrame then
  begin
    ActiveFrame :=Frame;
{    // use this for uncompressed video ONLY
    AVIStreamRead(AviStream, Frame, 1, FrameData, AviInfo.dwWidth*AviInfo.dwHeight*3, nil, nil);
}
    // use this for compressed video
    BMP := AVIStreamGetFrame(GetFramePointer, frame);
    FrameData := Pointer(Cardinal(BMP) + BMP.biSize + BMP.biClrUsed*sizeof(RGBQUAD));
    // the drawdib function will uncompress the framedata as it tries to copy the BMP
    DrawDibDraw(0, H_DC, 0, 0, AviInfo.dwWidth, AviInfo.dwHeight, @BMP, FrameData, 0, 0, AVIInfo.dwWidth, AVIInfo.dwHeight, 0);

    SwapRGB(FrameData, AviInfo.dwWidth * AviInfo.dwHeight); // Swap the BGR image to a RGB image

    glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, AviInfo.dwWidth, AviInfo.dwHeight, GL_RGB, GL_UNSIGNED_BYTE, FrameData);

  end;
end;
Zitat:

Die Codecs selber alle zu implementieren dürfte Mannjahre dauern.)
Das ist wohl war.

gruss

Davidlocke13 15. Nov 2012 10:53

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Warum kein Hardcopy ?
http://www.chip.de/downloads/Hardcopy_12998258.html

Medium 15. Nov 2012 11:24

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Das ist doch wieder so ein überflüssiges Programm :? Die Druck-Taste tut unter Win7 klaglos, und auch das Programm da wird keinen Grabber für DirectX Overlays an Bord haben, sei versichert.

Allerdings: Wenn man Aero aktiviert hat, geht tatsächlich ein einfaches GetDC(0) und daraus die entsprechende Stelle ausschneiden, da Win7 hier ohnehin den Screenshot aus DX holen muss (weil dann ja alles via DX dargestellt wird). Das geht ABER NUR wenn Aero an ist!

blondervolker 15. Nov 2012 11:31

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Hallo nochmal,

ich habe es auf eine ganz einfache Weise" selber lösen können.:thumb:

Delphi-Quellcode:
procedure TForm18.AdvGlassButton11Click(Sender: TObject);
var Bitmap : TBitmap;
DC:HDC;
begin
DC:=GetDc(Panel1.Handle);
Bitmap:=TBitmap.Create();
Bitmap.Width:=Panel1.Width;
Bitmap.Height:=Panel1.Height;
mediaplayer1.Display.PaintTo(Bitmap.Canvas,0,0); BitBlt(Bitmap.Canvas.Handle,0,0,Panel1.Width,Panel1.Height,DC,0,0,SRCCOPY);
Clipboard.Assign(Bitmap);
Bitmap.Free;
end;
hab es probiert mit mpg,wmv. Geht gut! Bin gerade beim testen mit avi und
was der Mediaplayer sonst noch "FRIST":-D

Medium 15. Nov 2012 11:48

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Und dann mach das mal mit abgeschaltetem Aero ;)

Edit: Warum erst noch das Mediaplayer1.Display.PaintTo, wenn du nachher eh vom Panel DC blittest?

blondervolker 15. Nov 2012 12:00

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Hab ich gerade auf 3 verschiedenen Rechnern probiert.Es geht.Bei mir kam keine Fehlermeldung.WIN XP,Vista,WIN7 ohne Aero...:-D

Medium 15. Nov 2012 12:39

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Dann nutzt der Mediaplayer kein Direct2D bzw. DirectDraw. Schwein gehabt ;)

(Trotzdem müsste das
Delphi-Quellcode:
mediaplayer1.Display.PaintTo(Bitmap.Canvas,0,0);
überflüssig sein.)

himitsu 15. Nov 2012 13:14

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Aero und spezieller der Windows-Desktop-Manager leitet gerne solche Sachen um, so daß sie dann doch direkt im Bild enthalten sind. (könnte aber auch sein, daß die es in diesen Programmen selber machen :gruebel:)
Ansonsten könnte man kein anderes Fenster halbtransparent davorlegen und hätte auch kein Bild in der Aerovorschau.

Was mit aber aufgefallen ist, als ich mal Screenshots machen wollte. Wenn man einen zweiten Videoplayer offen hat, der als erstes die Schnittstellen für's direkte Zeichnen blockioert, dann weichen der WMP und VLC aus und zeichnen auch direkt, so daß man da auch wieder "billige" Screenshots machen kann.

blondervolker 15. Nov 2012 13:23

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
Vielleicht den Code wieder rausradieren:-D,nicht dass es sich
jemand von Meikroosoooftbande noch anders überlegt.:-D:shock:

Ja und der eeene Code ist überflüssig :cyclops:

lbccaleb 15. Nov 2012 22:18

AW: Mediaplayer Pause Screen erstellen fehlt das Bild
 
http://www.swissdelphicenter.ch/torr...de.php?id=1180
oder
http://www.codeproject.com/Articles/...Grabber-for-Gr


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:14 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