.NET中如何使用MediaPlayer对象在指定PictureBox控件中播放视频?
在.NET中将视频通过MediaPlayer播放到PictureBox的实现方案
答案是可以,具体实现方式取决于你使用的.NET UI框架(WinForms/WPF):
WinForms 场景
WinForms没有原生MediaPlayer类,通常有两种可行方案:
1. 嵌入AxWindowsMediaPlayer到PictureBox
通过COM引用添加Windows Media Player控件,将其嵌入到PictureBox中:
// 先添加COM引用"Windows Media Player",生成AxWindowsMediaPlayer var wmp = new AxWindowsMediaPlayer(); wmp.Dock = DockStyle.Fill; pictureBox1.Controls.Add(wmp); wmp.URL = @"C:\example.mp4"; wmp.Ctlcontrols.Play();
这种方式简单直接,本质是把WMP控件作为PictureBox的子控件来渲染视频。
2. 用WPF MediaPlayer捕获帧并更新PictureBox
如果想使用WPF的MediaPlayer类,可以定时捕获视频帧,转换为Bitmap后赋值给PictureBox的Image属性:
using System.Windows.Media; using System.Windows.Media.Imaging; using System.Drawing.Imaging; var mediaPlayer = new MediaPlayer(); mediaPlayer.Open(new Uri(@"C:\example.mp4")); mediaPlayer.Play(); var frameTimer = new Timer { Interval = 33 }; // 对应约30帧/秒 frameTimer.Tick += (sender, e) => { if (mediaPlayer.Source == null || !mediaPlayer.NaturalDuration.HasTimeSpan) return; // 渲染当前帧到RenderTargetBitmap var rtb = new RenderTargetBitmap( pictureBox1.Width, pictureBox1.Height, 96, 96, PixelFormats.Pbgra32); var dv = new DrawingVisual(); using (var dc = dv.RenderOpen()) { dc.DrawImage(mediaPlayer, new Rect(0, 0, pictureBox1.Width, pictureBox1.Height)); } rtb.Render(dv); // 转换为Bitmap并更新PictureBox using (var ms = new MemoryStream()) { var encoder = new BmpBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(rtb)); encoder.Save(ms); pictureBox1.Image = new Bitmap(ms); } }; frameTimer.Start();
注意:需要引用WPF的PresentationCore和WindowsBase程序集,这种方式会有一定的性能开销,适合对播放要求不高的场景。
WPF 场景
WPF中没有PictureBox控件,对应的是Image控件。如果要使用MediaPlayer,同样可以通过帧捕获的方式将内容渲染到Image,但更推荐直接使用MediaElement控件——它是WPF原生的视频播放控件,使用更高效且无需手动处理帧捕获。
内容的提问来源于stack exchange,提问作者DumbestGuyOnSaturn
相关产品推荐
相关产品推荐

