彩票走势图

如何在WPF中实现对Flash的播放及循环截图

转帖|其它|编辑:郝浩|2011-03-04 13:55:26.000|阅读 1442 次

概述:要想实现Flash的播放支持,需要借助Flash自身的ActiveX控件. 而WPF作为一种展现层的技术,不能自身插入COM组件,必需借助Windows Form引入ActiveX控件. 本文则是介绍通过借助System.Windows.Forms下的WebBrowser实现.

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  要想实现Flash的播放支持,需要借助Flash自身的ActiveX控件.

  而WPF作为一种展现层的技术,不能自身插入COM组件,必需借助Windows Form引入ActiveX控件.

  比较标准的实现方法,可以参考以下链接://blogs.msdn.com/b/jijia/archive/2007/06/07/wpf-flash-activex.aspx

  而本文则是介绍通过借助System.Windows.Forms下的WebBrowser实现.

  但无论是那一种方法,本质上都是通过在WPF程序中引用Windows Form窗体,再在其内引入ActiveX控件.

  实现对Flash的播放

  首先,引入可在WPF上承载 Windows 窗体控件的元素:WindowsFormsHost,及添加对 Windows 窗体的引用.

  具体的实现过程:项目引用--添加引用--选择 "WindowsFormsIntegration" 及 "System.Windows.Forms" --添加

  在WPF页面分别添加这两者的引用:‘

1 xmlns:host="clr-namespace:System.Windows.Forms.
Integration;assembly=WindowsFormsIntegration"
2 xmlns:forms="clr-namespace:System.Windows.
Forms;assembly=System.Windows.Forms"

  XAML中的所有实现代码:

<Window x:Class="Capture.MainWindow"
         xmlns="//schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x= "//schemas.microsoft.com/winfx/2006/xaml"
         xmlns:host= "clr-namespace:System.Windows.Forms.
Integration;assembly=WindowsFormsIntegration"
         xmlns:forms= "clr-namespace:System.Windows.Forms;
assembly=System.Windows.Forms"
         Title= "File Capture" Height="600" Width="800"
         Unloaded= "Window_Unloaded"
         >
     <Grid>
         <Grid.ColumnDefinitions>
             <ColumnDefinition Width="*"></ColumnDefinition>
             <ColumnDefinition Width="150"></ColumnDefinition>
         </Grid.ColumnDefinitions>
         <host:WindowsFormsHost x:Name="host">
             <forms:WebBrowser x:Name="browser"></forms:WebBrowser>
         </host:WindowsFormsHost>
         <Grid Background="Gray" Grid.Column="1">
             <UniformGrid Rows="5" VerticalAlignment="Top">
                 <Button x:Name="btnOpen" Width="100" Height="30"
  Click= "btnOpen_Click" Margin="0,10">Open File</Button>
                 <Button x:Name="btnCapture" Width="100" Height="30"
  Click= "btnCapture_Click" Margin="0,10">Start Capture</Button>
                 <Button x:Name="btnStop" Width="100" Height="30"
  Click= "btnStop_Click" Margin="0,10">Stop Capture</Button>
                 <CheckBox x:Name="cboxLoop" IsChecked="True" 
HorizontalAlignment="Left" VerticalAlignment="Center"
  Margin= "25,10,0,10">Loop Capture</CheckBox>
             </UniformGrid>
         </Grid>
     </Grid>
</Window>

  当需要把一选中的Flash文件(.swf 文件)添加进WebBrowser 中播放:

  browser.Navigate(currentPath);

  实现对Flash的截图

  实现对Flash的截图,只要使用WebBrowser的基类WebBrowserBase里面的DrawToBitmap方法.

  参数Bitmap为所绘制的位图(需初始化位图的大小),Rectangle为截取WebBrowser内容的区域(大小)

1 public void DrawToBitmap(
2     Bitmap bitmap,
3     Rectangle targetBounds
4 )

  具体的实现代码:

 1 private void Capture()
  2         {
  3             string fileName = System.IO.Path.GetFileNameWithoutExtension(currentPath);
  4             string capturePath = string.Format( "{0}\\Capture\\{1}", 
System.Environment.CurrentDirectory, fileName);
  5 
  6             if (!Directory.Exists(capturePath))
  7             {
  8                 Directory.CreateDirectory(capturePath);
  9             }
10 
11             Bitmap myBitmap = new Bitmap((int)host.ActualWidth, 
(int)host.ActualHeight);
12             System.Drawing.Rectangle DrawRect =
  new System.Drawing.Rectangle(0, 0, (int)host.ActualWidth, (int)host.ActualHeight);
13             browser.DrawToBitmap(myBitmap, DrawRect);
14 
15             string timeNow = DateTime.Now.ToString("yyyyMMddHHmmssfff");
16 
17             myBitmap.Save(string.Format("{0}\\{1}_{2}.png",
  capturePath, fileName, timeNow));
18      &nbsp;  }

  界面效果:


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP