【问题标题】:take a video snapshot within webbrowser control在网络浏览器控件中拍摄视频快照
【发布时间】:2013-11-17 04:28:23
【问题描述】:

我正在开发 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>

【问题讨论】:

    标签: c# .net winforms webbrowser-control screen-capture


    【解决方案1】:

    这是因为页面内的视频框不是由网络浏览器呈现,而是由快速插件呈现。因此,网络浏览器没有该区域的图形内容信息。它会绘制空白框。

    现在知道屏幕上所有图形内容的只有Screen 本身。所以你可以试试Graphics.CopyFromScreen 方法。虽然它有一些缺点。这一次,它将捕获屏幕上的所有内容,包括任务栏和标题栏。其次,它将仅捕获页面的可见部分。如果页面需要滚动,或者您需要整页截图,那么我们就有问题了。

    不过,我们可以有解决方法。可以通过仔细计算整个屏幕的矩形区域来裁剪任务栏/标题栏。类似地,该页面可以通过编程方式滚动、重新捕获并将图像加入到全页视图中。

    至于实际的实现,我对从屏幕上捕捉完美尺寸的矩形相当乐观。如果你问,我可以帮忙写代码。先试试 (tip) 。至于scroll-capture-join的第二部分,我敢肯定这会很乏味,但可以实现。

    【讨论】:

    • 如果他将两者混合使用,他应该会很好。使用Screen 抓取真正可见的东西,然后浏览器拍摄。匹配像素以对齐所有内容并仅保留浏览器可见框。有一些代码可以在两张图片之间找到匹配项,并且可以将它们相互对齐,如果其中一张图片的比例不同,它也可以很好地工作。我过去用过。还有可以做到这一点的 PHP 图形库。图像魔术或类似的东西。
    • 通过使用 CopyFromScreen,我可以设法捕获全屏;但是,我上面提到的相机是另一种形式,我试图只捕获那种形式,但我不能,这是获取全屏的代码
    • int screenX = Screen.PrimaryScreen.Bounds.X; int screenY = Screen.PrimaryScreen.Bounds.Y;位图 bmpScreenShot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);图形 gfxScreenShot = Graphics.FromImage(bmpScreenShot); gfxScreenShot = Graphics.FromImage(bmpScreenShot); gfxScreenShot.CopyFromScreen(screenX, screenY, 0, 0,Screen.PrimaryScreen.Bounds.Size,CopyPixelOperation.SourceCopy); bmpScreenShot.Save(name + ".png");
    【解决方案2】:

    此页面使用 Apple 的 Quick Time ActiveX 控件进行视频播放。最有可能的是,该控件使用 DirectX 并且不响应 WM_PRINT 消息(由 WebBrowser.DrawToBitMap 内部使用)。虽然我认为成功的机会很低,但您可以尝试其他一些事情,具体到 WebBrowser(即,在全屏捕获上下文之外):

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 2018-07-08
      相关资源
      最近更新 更多