截屏时如何获得正在播放的视频部份的图像?

lxcooi 2008-02-15 08:01:21
本以为很单的功能但是实际使用时却得不到视频播放器的图像部份。
太难了,谁能帮我?
GDI的Bitblt
DirectX的GetFrontBuffer
全都得不到,谁能帮我,百分求解
另说一句,我需要在局域网内实现高实时传输,所以Windows Media API中的直接录WMV方法不适合我。

欢迎大家讨论。
另说一句DirectX的GetFrontBuffer比GDI的Bitblt慢几十倍!微软说了“就是这么设计的!”大家别像我一样,实现了才发现,痛苦
原文:“This function is very slow, by design, and should not be used in any performance-critical path.”
...全文
441 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxcooi 2008-02-20
  • 打赏
  • 举报
回复
感谢大家的帮助,受教了!
前两天太忙,现在结贴!
qiangv 2008-02-18
  • 打赏
  • 举报
回复
ls的全面,受教了
eduyu 2008-02-18
  • 打赏
  • 举报
回复
方法1:如你所说的mirror driver,也就是一个虚拟的display driver。这样当然彻底了。
方法2:如楼上说的关掉hardware acceleration。也就是强迫所有播放器视频输出到显存而非显卡的overlay设备。
通常鼠标Cursor和视频都是在overlay上和显存合成最后输出的,这也就是为何照不到视频和鼠标的原因了。
方法3:最简单的,MPC播放器是可以自己选择视频输出方式的,让MPC选择非overlay的输出方式。不影响系统其它软硬件。如果可以让用户选播放器,这个是最合适而且最容易实现的方式。
rageliu 2008-02-18
  • 打赏
  • 举报
回复
这是由于其使用了硬件加速,所以和gdi方式完全不同,禁掉加速就可以抓到了
象mirror也可以
china_bai 2008-02-17
  • 打赏
  • 举报
回复
我也曾经遇到过类似的问题。
当时是对Media player中正在播放的画面进行截屏,结果出来的结果总是黑屏。

后来好像是把Media player 控件的版本设置为6.0才搞定。
lxcooi 2008-02-17
  • 打赏
  • 举报
回复
播放器的截取正在播放的画面使用的是获取当前帧的方法,在这里没有任何可参考的地方。

今天第一次截到了播放器的画面,使用了WINDDK中的镜像卡驱动。
不过安装镜像卡驱动后桌面显示有点问题,正在修改中。

明天结贴。
eduyu 2008-02-16
  • 打赏
  • 举报
回复
我是说MPC内建截图代码,没用过MPC?暴风影音就是MPC的汉化版本。
lxcooi 2008-02-16
  • 打赏
  • 举报
回复
兄弟们,我补充一下,我要作的大约是一个截屏软件,不是播放软件,也就是说我需要在获得整个桌面区域的同时得到在其中播放的视频图像。

感谢cnzdgs兄!
eduyu 2008-02-16
  • 打赏
  • 举报
回复
参考Media player classic的实现,开源的。
cnzdgs 2008-02-15
  • 打赏
  • 举报
回复
我以前写过的一个类,你参考一下吧。
class CSurface
{
protected:
LPDIRECTDRAW m_pdd;
LPDDSURFACEDESC m_pddsd;
LPDIRECTDRAWSURFACE m_pdds;
public:
CSurface();
virtual ~CSurface();
bool Create(void);
bool Lock(void);
bool Unlock(void);
void Release(void);
public:
DWORD m_dwBitCount;
DWORD m_dwWidth;
DWORD m_dwHeight;
DWORD m_dwLinearSize;
DWORD m_dwSize;
PPALETTEENTRY m_ppePalette;
PBYTE m_pData;
};

CSurface::CSurface()
{
m_pdd = NULL;
m_pdds = NULL;
m_pddsd = new DDSURFACEDESC;
m_ppePalette = new PALETTEENTRY[0x100];
if ((m_pddsd == NULL) || (m_ppePalette == NULL))
return;
if (DirectDrawCreate(NULL, &m_pdd, NULL) != DD_OK)
{
m_pdd = NULL;
return;
}
if (m_pdd->SetCooperativeLevel(NULL, DDSCL_NORMAL) != DD_OK)
{
m_pdd = NULL;
return;
}
}

CSurface::~CSurface()
{
Release();
delete m_pddsd;
delete m_ppePalette;
}

bool CSurface::Create()
{
if (m_pdd == NULL)
return false;
m_pddsd->dwSize = sizeof(DDSURFACEDESC);
m_pddsd->dwFlags = DDSD_CAPS;
m_pddsd->ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
if (m_pdd->CreateSurface(m_pddsd, &m_pdds, NULL) != DD_OK)
return false;
if (m_pdds->Lock(NULL, m_pddsd, DDLOCK_WAIT | DDLOCK_READONLY, NULL) != DD_OK)
{
m_pdds->Release();
return false;
}
m_pdds->Unlock(NULL);
m_dwWidth = m_pddsd->dwWidth;
m_dwHeight = m_pddsd->dwHeight;
m_dwLinearSize = m_pddsd->dwLinearSize;
m_dwSize = m_dwLinearSize*m_dwHeight;
m_dwBitCount = m_pddsd->ddpfPixelFormat.dwRGBBitCount;
if (m_dwBitCount <= 8)
{
HDC hDC;
int nPaletteLength;
bool bResult;

if (m_pdds->GetDC(&hDC) != DD_OK)
{
m_pdds->Release();
return false;
}
if (m_dwBitCount == 8)
nPaletteLength = 256;
else
nPaletteLength = 16;
bResult = (::GetSystemPaletteEntries(hDC, 0, nPaletteLength, m_ppePalette) != 0);
m_pdds->ReleaseDC(hDC);
if (!bResult)
{
m_pdds->Release();
return false;
}
}
return true;
}

void CSurface::Release()
{
if (m_pdds != NULL)
m_pdds->Release();
m_pdds = NULL;
}

bool CSurface::Lock()
{
if ((m_pdd == NULL) || (m_pdds == NULL))
return false;
if (m_pdds->Lock(NULL, m_pddsd, DDLOCK_WAIT | DDLOCK_READONLY, NULL) != DD_OK)
return false;
m_pData = (PBYTE)m_pddsd->lpSurface;
m_pdds->Unlock(NULL);
return true;
}

经过数20天的开发,shearphoto的第一个版本终于完成, 我开发shearphoto的全因是切图,截图这类WEB插件实在太少,我特此还专门在网上下载过几个关于截图插件, 基本上互联网上所有的截图插件我都看过了一遍,压根没有令我满意的,要不功能太小,要不BUG超多 要不都基于FLASH的,基于FLASH的截图很不好,扩展性非常差,不方便二次开发这是一个重点问题。 还有些截图插件是收费200块去版权,本来就不怎么让人满意,还收费呢!我就不点名是哪个截图插件了。 于是就想到自己开发一个这样的插件。 本人开发shearphoto前提,首先是不会对代码进行加密,所有代码都是开源的,必须兼容目前所有浏览器(包括IE6)。 也就是说你可以对shearphoto任意修改!另外shearphoto不会对你收取任何费用,当然如果你要找本人定制开发就另谈了! 再说说这20天开发,那简直就是人间炼狱,每天12小,烟量不段增加,无数的开发难题困扰着,光插件内的JS方法重写,就超过5次。 重写又重写,重写又有BUG,很多候,真的无法解决了,我想过放弃,做这种插件首先不赚钱,还占用大量的间。 每次想到放弃,我都想安慰自己"都开发了一大半了,放弃了就什么都没了,放弃就输了",正是我这种不屈服的精神,shearphoto终于完成了, shearphoto是我内心挣扎和汗水交织而成的作品,我不敢说shearphoto没有BUG,也不敢说shearphoto的代码没有问题。目前shearphoto还处于公测阶段,如果你发现有BUG或者某些代码写得不好,请第一间联系我 QQ399195513 shearphoto是JS面向对象开发,绝对不含JQUERY,更不含第三方代码,更更没有第三方插件,全部采用原生JS和原生PHP开发。 为什么shearphoto不使用JQUERY,本人玩了JQUERY三年,对JQUERY一点好感也没有,反而造就了一批懒人,对技术的提升没有半点好处。 再者,JQUERY是一个类库,很多方法都帮你写好了,如果使用了JQUERY,那插件的功劳是不是要算上JQUERY一份呢,因此shearphoto在开发前就严重拒绝JQUERY驾入 以后的后续升级也不会有JQUERY的存在!shearphoto的原则:免费,开源,兼容目前所有浏览器,纯原生JS和PHP编写。 有人问:为什么只有PHP后端,没有JAVA和NET,很遗含告诉你,本人不懂JAVA和NET,但是以后的升级我会加上去的,当然你JAVA和NET玩得牛B,你可以在我的JS基础上编写。 目前shearphoto只支持PHP,如果你把JAVA或NET写了,可以发我一份,那么你就是shearphoto开发者之一!呵呵! shearphoto的应用范围: 1:网站会员头像截取,shearphoto能自由设置按比例截图或不按比例截图,也可以对图片旋转,在线拍照,你可以截取不同比例的,不同大小,各种旋转的图片。后台 前台均有设置接口,非常简单 2:商城商品图片切割,例如这个商品图片,有的图像部份我要去掉,那么shearphoto就能帮助你进行切割,又例如这个图片太大了,我想切小点,shearphoto也能帮你实现 3:在线美工切图等 shearphoto的用途非常广,shearphoto截图灵敏,拉伸或拖拽都非常流畅,不像FLASH的截图插件那么卡,半于反应不过来,shearphoto易于二次开发,所有代码都是开源的HTML,JS PHP编写,二次非常简单 shearphoto的官方网站:www.shearphoto.com,网站有开发文档,以及shearphoto讨论区,大家可以在官网进行交流心得或者定制开发 你也可以加入shearphoto官方QQ群:461550716,分享与我进行交流。 shearphoto是属于大家的,shearphoto创造崭新截图环境,希望大家喜欢shearphoto 本程序版本号:shearphoto1.0 版本号:shearphoto1.0 shearphoto官网:www.shearphoto.com shearphoto官方QQ群:461550716 2015年8月7日 明哥先生
经过数20天的开发,shearphoto的第一个版本终于完成, 我开发shearphoto的全因是切图,截图这类WEB插件实在太少,我特此还专门在网上下载过几个关于截图插件, 基本上互联网上所有的截图插件我都看过了一遍,压根没有令我满意的,要不功能太小,要不BUG超多 要不都基于FLASH的,基于FLASH的截图很不好,扩展性非常差,不方便二次开发这是一个重点问题。 还有些截图插件是收费200块去版权,本来就不怎么让人满意,还收费呢!我就不点名是哪个截图插件了。 于是就想到自己开发一个这样的插件。 本人开发shearphoto前提,首先是不会对代码进行加密,所有代码都是开源的,必须兼容目前所有浏览器(包括IE6)。 也就是说你可以对shearphoto任意修改!另外shearphoto不会对你收取任何费用,当然如果你要找本人定制开发就另谈了! 再说说这20天开发,那简直就是人间炼狱,每天12小,烟量不段增加,无数的开发难题困扰着,光插件内的JS方法重写,就超过5次。 重写又重写,重写又有BUG,很多候,真的无法解决了,我想过放弃,做这种插件首先不赚钱,还占用大量的间。 每次想到放弃,我都想安慰自己"都开发了一大半了,放弃了就什么都没了,放弃就输了",正是我这种不屈服的精神,shearphoto终于完成了, shearphoto是我内心挣扎和汗水交织而成的作品,我不敢说shearphoto没有BUG,也不敢说shearphoto的代码没有问题。目前shearphoto还处于公测阶段,如果你发现有BUG或者某些代码写得不好,请第一间联系我 QQ399195513 shearphoto是JS面向对象开发,绝对不含JQUERY,更不含第三方代码,更更没有第三方插件,全部采用原生JS和原生PHP开发。 为什么shearphoto不使用JQUERY,本人玩了JQUERY三年,对JQUERY一点好感也没有,反而造就了一批懒人,对技术的提升没有半点好处。 再者,JQUERY是一个类库,很多方法都帮你写好了,如果使用了JQUERY,那插件的功劳是不是要算上JQUERY一份呢,因此shearphoto在开发前就严重拒绝JQUERY驾入 以后的后续升级也不会有JQUERY的存在!shearphoto的原则:免费,开源,兼容目前所有浏览器,纯原生JS和PHP编写。 有人问:为什么只有PHP后端,没有JAVA和NET,很遗含告诉你,本人不懂JAVA和NET,但是以后的升级我会加上去的,当然你JAVA和NET玩得牛B,你可以在我的JS基础上编写。 目前shearphoto只支持PHP,如果你把JAVA或NET写了,可以发我一份,那么你就是shearphoto开发者之一!呵呵! shearphoto的应用范围: 1:网站会员头像截取,shearphoto能自由设置按比例截图或不按比例截图,也可以对图片旋转,在线拍照,你可以截取不同比例的,不同大小,各种旋转的图片。后台 前台均有设置接口,非常简单 2:商城商品图片切割,例如这个商品图片,有的图像部份我要去掉,那么shearphoto就能帮助你进行切割,又例如这个图片太大了,我想切小点,shearphoto也能帮你实现 3:在线美工切图等 shearphoto的用途非常广,shearphoto截图灵敏,拉伸或拖拽都非常流畅,不像FLASH的截图插件那么卡,半于反应不过来,shearphoto易于二次开发,所有代码都是开源的HTML,JS PHP编写,二次非常简单 shearphoto的官方网站:www.shearphoto.com,网站有开发文档,以及shearphoto讨论区,大家可以在官网进行交流心得或者定制开发 你也可以加入shearphoto官方QQ群:461550716,分享与我进行交流。 shearphoto是属于大家的,shearphoto创造崭新截图环境,希望大家喜欢shearphoto 本程序版本号:shearphoto1.0 版本号:shearphoto1.0 shearphoto官网:www.shearphoto.com shearphoto官方QQ群:461550716 2015年8月7日 明哥先生

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧