WPF中的视频——(2)

          由于MediaPlayer是为程序代码设计的,为了让MediaPlayer加载的媒体能够显示出来,必须使用VideoDrawingDrawingContext

          VideoDrawing类是用来将播放的媒体绘制到指定的矩形中。通过MediaPlayer打开和播放媒体文件,而将创建的MediaPlayer对象赋给VideoDrawingPlayer属性就可以实现视频绘制。

前台代码如下:

    <Grid>

        <Grid.Background>

            <DrawingBrush>

                <DrawingBrush.Drawing>

                    <VideoDrawing x:Name="video" Rect="0 0 1920 1080"/>

                </DrawingBrush.Drawing>

            </DrawingBrush>

        </Grid.Background>

    </Grid>

后台代码如下:

    void Window1_Loaded(object sender, RoutedEventArgs e)

    {

        MediaPlayer player = new MediaPlayer();

        player.Open(new Uri(@"C:"Users"Public"Videos"Sample Videos"bear.wmv"));

        video.Player = player;

        player.Play();

    }

性能说明:VideoDrawing提供的功能比MediaElement少:VideoDrawing不支持布局、输入或焦点。但是,因为VideoDrawing不支持这些功能,所以它具备一些性能优点,并使这些优点特别适合于描绘背景和剪贴画以及采用Visual对象进行低级别的绘制操作。

          VideoDrawingMediaPlayer一起播放视频文件,第一种方式就是上面提到的。另一种方式是创建MediaTimeline,并将其与MediaPlayerVideoDrawing一起使用。两者区别是:第一种方式MediaPlayer工作在独立模式,可以使用自己的交互式方法(PlayPauseStop等);第二种方式MediaPlayer工作在时钟模式,需要使用MediaTimeline创建的MediaClockController属性返回的交互式ClockController控制媒体播放,且可以对媒体进行更多的计时控制,包括指定是否重复播放视频,播放的时间和开始时间等。

          使用第二种方式播放视频,前台代码相同,后台代码如下:

    void Window1_Loaded(object sender, RoutedEventArgs e)

    {

        MediaTimeline timeline = new MediaTimeline(new Uri(@"C:"Users"Public"Videos"Sample Videos"bear.wmv"));

        timeline.RepeatBehavior = RepeatBehavior.Forever;

        MediaClock clock = timeline.CreateClock();

        MediaPlayer player = new MediaPlayer();

        player.Clock = clock;

        video.Player = player;

        player.Clock.Controller.Begin();

    }

          DrawingContext用于保留模式图形系统,使用DrawingContext对象的绘图命令进行进行绘制。绘制的一系列呈现指令供图形系统以后使用,而不是实时的绘制到屏幕上。永远不能直接实例化DrawingContext对象,需要使用DrawingVisual.RenderOpenDrawingGroup.Open等某些方法获取绘图上下文。

使用DrawingVisual.RenderOpen时:

前台代码:

    <Grid>

        <Grid.Background>

            <VisualBrush x:Name="brush"/>

        </Grid.Background>

    </Grid>

后台代码:

    void Window1_Loaded(object sender, RoutedEventArgs e)

    {

        DrawingVisual visual = new DrawingVisual();

 

        MediaPlayer play = new MediaPlayer();

        play.Open(new Uri(@"C:"Users"Public"Videos"Sample Videos"bear.wmv"));

        DrawingContext dc = visual.RenderOpen();

        dc.DrawVideo(play, new Rect(0, 0, 1920, 1080));

        play.Play();

        dc.Close();

        brush.Visual = visual;

    }

 

使用DrawingGroup.Open时:

前台代码:

    <Grid>

        <Grid.Background>

            <DrawingBrush x:Name="brush"/>

        </Grid.Background>

    </Grid>

后台代码:

    void Window1_Loaded(object sender, RoutedEventArgs e)

    {

        DrawingGroup group = new DrawingGroup();

        DrawingContext dc = group.Open();

        MediaPlayer play = new MediaPlayer();

        play.Open(new Uri(@"C:"Users"Public"Videos"Sample Videos"bear.wmv"));

        dc.DrawVideo(play, new Rect(0, 0, 1920, 1080));

        play.Play();

        dc.Close();

        brush.Drawing = group;

    }

转载于:https://www.cnblogs.com/xirihanlin/archive/2009/03/12/1410070.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值