Delphi 如何从TMediaPlayer(VCL)捕获帧

Delphi 如何从TMediaPlayer(VCL)捕获帧,delphi,screenshot,vcl,delphi-xe7,tmediaplayer,Delphi,Screenshot,Vcl,Delphi Xe7,Tmediaplayer,如何从TMediaPlayer(VCL)中捕获所有帧(在RAM中,而不是磁盘),而不在屏幕上显示视频 我试过这个: MediaPlayer设置为在面板中显示电影: MediaPlayer1.Display := pnlFakeScreen; pnlFakeScreen.Visible:= true; pnlFakeScreen.top:= -10000; 我使用此选项从不可见面板获取图像: ADC := GetDC(pnlFakeScreen.Handle); Bitblt(BMP.Ca

如何从TMediaPlayer(VCL)中捕获所有帧(在RAM中,而不是磁盘),而不在屏幕上显示视频


我试过这个:

MediaPlayer设置为在面板中显示电影:

MediaPlayer1.Display := pnlFakeScreen;
pnlFakeScreen.Visible:= true; 
pnlFakeScreen.top:= -10000; 
我使用此选项从不可见面板获取图像:

ADC := GetDC(pnlFakeScreen.Handle);
Bitblt(BMP.Canvas.Handle, 0,0,  BMP.Width, BMP.Height, ADC, 0, 0, SRCCOPY);

当面板不可见或在屏幕外时,捕获不起作用。

这很可能是因为MCI意识到不需要在不可见的窗口上渲染。你为什么要这样做?很可能这是解决你问题的错误方法。遗憾的是,你没有说明问题所在。经典XY场景。@Victoria-我需要获取帧,对其进行一些处理,然后显示它们(或在处理后将其保存到磁盘)。MCI API支持直接捕获视频帧而不显示它们
TMediaPlayer
只是不公开该功能,因此直接使用API。使用DirectShow可能是正确的解决方案,但请注意:它很难使用,尤其是如果您以前从未进行过任何DirectShow编程。构建图形,添加所需的过滤器,其中一个过滤器必须是允许将图片捕获为位图的过滤器。我们正在为此使用DSPack。这很可能是因为MCI意识到不需要在不可见的窗口上渲染。你为什么要这样做?很可能这是解决你问题的错误方法。遗憾的是,你没有说明问题所在。经典XY场景。@Victoria-我需要获取帧,对其进行一些处理,然后显示它们(或在处理后将其保存到磁盘)。MCI API支持直接捕获视频帧而不显示它们
TMediaPlayer
只是不公开该功能,因此直接使用API。使用DirectShow可能是正确的解决方案,但请注意:它很难使用,尤其是如果您以前从未进行过任何DirectShow编程。构建图形,添加所需的过滤器,其中一个过滤器必须是允许将图片捕获为位图的过滤器。我们正在为此使用DSPack。