技术开发 频道

Silverlight 3 对Media支持的新特性

  动态控件截图支持:

  如下代码所示:

<StackPanel Width="600">  
     <MediaElement x:Name="ME" Source="gt_hd.wmv" MouseLeftButtonDown="ME_MouseLeftButtonDown"/>  
     <controls:WrapPanel x:Name="ThumbnailsPanel"></controls:WrapPanel>  
 </StackPanel>

  我们有个播放视频的MediaElement,下面的WrapPanel将被用来存放动态截图。截图过程将通过鼠标左键点击视频的动作来触发,这个动作的代码如下:

1: private void ME_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)  
2: {  
3:     int width = 600;  
4:     int height = 600 * ME.NaturalVideoHeight / ME.NaturalVideoWidth;  
5:    
6:     WriteableBitmap wBitmap = new WriteableBitmap(width, height, PixelFormats.Bgr32);  
7:     wBitmap.Render(this.ME, new MatrixTransform());  
8:    
9:     Image img = new Image();  
10:     img.Width = 140;  
11:     img.Margin = new Thickness(5);  
12:     img.Source = wBitmap;  
13:    
14:     this.ThumbnailsPanel.Children.Add(img);  
15: }

  这里传给WriteableBitmap的width和height是有考究的,其设置的尺寸如果大于当前控件(我们这里是一段视频)的实际显示尺寸,其他区域将用白色填充,而第7行的new MatrixTransform()代表我们从左上角算截图的起点,当然你也可以位移一段距离(TranslateTransform)或者旋转一定得角度(RotateTransform)等等变换来设置你的截图的起点。

图4 动态截图

图5 动态截图

  非常实用的一个特性,Media的新的特性还包括可以动态创建自己的视频和音频,其原理和WriteableBitmap差不多,但是其复杂性提高了很多。

查看原文

0
相关文章