首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Windows窗体从嵌入式Windows Media Player捕获图像

C# Windows窗体从嵌入式Windows Media Player捕获图像
EN

Stack Overflow用户
提问于 2014-05-31 15:06:11
回答 1查看 2.8K关注 0票数 2

我有一个用C#编写的windows窗体应用程序,它使用嵌入式Windows Media Player (AxInterop.WMPLib.dll和WMPLib.dll)来播放一些视频文件。现在,我需要添加一个选项,以捕获点击按钮上的视频图像。如果我将windowless选项设置为true,我可以捕获视频图像,但当我将windowless选项设置为true时,我在某些计算机上看不到视频图像。如果没有windowless选项,我只能在下面的代码中看到黑屏:

代码语言:javascript
复制
        System.Drawing.Image ret = null;
        try{
            Bitmap bitmap = new Bitmap(wmPlayer.Width-26, wmPlayer.Height-66);
            {
                Graphics g = Graphics.FromImage(bitmap);
                {
                    Graphics gg = wmPlayer.CreateGraphics();
                    {
                        this.BringToFront();

                           g.CopyFromScreen(
                            wmPlayer.PointToScreen(
                                new System.Drawing.Point()).X+13,
                            wmPlayer.PointToScreen(
                                new System.Drawing.Point()).Y,
                            0, 0,
                            new System.Drawing.Size(
                                wmPlayer.Width-26,
                                wmPlayer.Height-66)  
                            );
                    }
                }
                using (MemoryStream ms = new MemoryStream()){
                        bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                        ret = System.Drawing.Image.FromStream(ms);
                        ret.Save(@"C:\\WMP_capture.png");
                        pictureBox1.Image=ret;
                }
            }
            bitmap.Dispose();

        }catch (Exception){ }

在C#中没有windowless选项的情况下,如何从嵌入式Windows Media Player中播放的视频中捕获帧(快照)?

或者是否有任何其它用于C# windows窗体的视频播放器可以容易地实现并且支持捕获功能。

EN

回答 1

Stack Overflow用户

发布于 2014-05-31 15:28:07

希望这段代码能为您工作

代码语言:javascript
复制
if (!string.IsNullOrEmpty(axWindowsMediaPlayer1.URL)){
axWindowsMediaPlayer1.Ctlcontrols.pause();

System.Drawing.Image ret = null;
try
{
    // take picture BEFORE saveFileDialog pops up!!
    Bitmap bitmap = new Bitmap(axWindowsMediaPlayer1.Width, axWindowsMediaPlayer1.Height);
    {
        Graphics g = Graphics.FromImage(bitmap);
        {
            Graphics gg = axWindowsMediaPlayer1.CreateGraphics();
            {
                //timerTakePicFromVideo.Start();
                this.BringToFront();
                g.CopyFromScreen(
                    axWindowsMediaPlayer1.PointToScreen(
                        new System.Drawing.Point()).X,
                    axWindowsMediaPlayer1.PointToScreen(
                        new System.Drawing.Point()).Y,
                    0, 0,
                    new System.Drawing.Size(
                        axWindowsMediaPlayer1.Width,
                        axWindowsMediaPlayer1.Height)
                    );
            }
        }
        // afterwards save bitmap file if user wants to
        if (saveFileDialog1.ShowDialog() == DialogResult.OK)
        {
            using (MemoryStream ms = new MemoryStream())
            {
                bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                ret = System.Drawing.Image.FromStream(ms);
                ret.Save(saveFileDialog1.FileName);
            }
        }
    }
}
catch (Exception ex)
{
    Debug.WriteLine(ex.Message);
}

}

另一个演示:http://www.codeproject.com/Articles/34663/DirectShow-Examples-for-Using-SampleGrabber-for-Gr

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23967411

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档