我正在Windows窗体上获取一个内容相机视频的网站,然后在本网站上捕捉图像 我正在使用
webbrowser1.DrawToBitMap(bitmap, bitmapRect)
但图像显示全白。然后我尝试从另一个站点(例如google.com)捕获图像,该方法完美地工作。所以我认为这可能是因为这种方法无法捕捉视频。所以我的问题是我们有什么方法可以通过网络浏览器控制来捕捉网站中的视频吗? 这是我嵌入相机视频的代码
<object classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" width="704" height="592" codebase="http://www.apple.com/qtactivex/qtplugin.cab">
<param name="src" value="empty.mov">
<param name="autoplay" value="true">
<param name="controller" value="false">
<param name="qtsrc" value="rtsp://<link>">
<embed src="empty.mov" width="704" height="592" qtsrc="rtsp://<link>" autoplay="true" controller="false" target="myself" pluginspage="http://www.apple.com/quicktime/download/">
</object>
答案 0 :(得分:0)
这种情况正在发生,因为页面内的视频框不是由网络浏览器呈现,而是由快速时间插件呈现。因此,网络浏览器没有该区域的图形内容的信息。它会画出空白框。
现在,了解屏幕上所有图形内容的所有人的是Screen
本身。所以你可以尝试Graphics.CopyFromScreen
方法。但它有一些缺点。一次,它会捕获屏幕上的所有内容,包括任务栏和标题栏。第二,它只捕获页面的可见部分。如果页面需要滚动,或者您需要整页截图,那么我们就会遇到问题。
我们可以有办法解决方法。可以通过仔细计算整个屏幕外的矩形区域来裁剪任务栏/标题栏。类似地,页面可以以编程方式滚动,重新捕获并且图像连接到整页视图。
至于实际实现,我相当乐观地从屏幕上捕获完美大小的矩形。如果你问,我可以提供帮助。首先尝试(tip)。至于滚动捕获连接的第二部分,我相信它会非常繁琐,但是可以实现。
答案 1 :(得分:0)
此页面使用Apple的Quick Time ActiveX控件进行视频播放。最有可能的是,该控件使用DirectX并且不响应WM_PRINT
消息(内部由WebBrowser.DrawToBitMap
使用)。虽然我相信成功的机会很低,但您可以尝试其他一些特定于WebBrowser
的内容(即,在全屏捕获上下文之外):
FEATURE_IVIEWOBJECTDRAW_DMLT9_WITH_GDI
WebBrowser
功能(here's how)。继续保持下一步。FEATURE_GPU_RENDERING
WebBrowser
功能。OleDraw
API代替DrawToBitMap
,将WebBrowser.ActiveXInstance
作为pUnknown
参数传递。WebBrowser.Document.Body.DomElement
,请求IHTMLElementRender
并尝试IHTMLElementRender::DrawToDC
。这个甚至可以工作。