• Silverlight4.0教程之与摄像头与迈克风设备交互


    微软于PDC2009上发布Silverlight 4 Beta版,微软在Silverlight 4版本中处理了约8000个的Silverlight终端用户的请求,加入了一系列另开发人员兴奋的新特性,最突出的主要体现在几个方面:

    开发工具增强:Visual Studio 2010具有可视化的设计工具,创建项目时可以选择运行时版本是3.0还是4.0,BLEND4加入XAML和C#代码全方位智能感知功能、XAML的样式应用更为易用等。

    摄像头与MIC硬件支持:可以用极少量的代码实现启用用户本机的WebCam和Mic,并可进行本地录制。

    报表打印支持:报表打印问题在Silverlight4中得到的较好的解决。

    更强大的基础类控件(RichTextBox、DataGrid增强版):富文本控件RichTextBox和具有可粘贴、排序功能的DataGrid被加入。

    WCF增强:终于支持TCP通讯,比较HTTP提升3-5倍,限于4502-4534端口。

    兼容性增强:对Google的Chrome浏览器的支持。

    MEF支持:MEF全称为Managed Extensibility Framework,译为“托管扩展框架”,支持创建大型复杂的应用程序。

    运行速度提升:启动速度和渲染速度较前个版本提升约2倍左右。

    DRM增强:支持PlayReady,可以对视频和音频的播放进行的保护,补充了对H.264的DRM保护。

    其它增强:本地文件读写、鼠标右键事件支持、剪粘板支持。

     

    当用户安装好Silverlight 4.0运行时后,打开浏览器在任何一个Silverlight应用程序点击鼠标右键可以看到Silverlight4插件的属性,其中加入了WebCam和MIC支持的TAB项,如图所示。

    image

    Silverlight 4.0的CaptureDeviceConfiguration.GetAvailableVideoCaptureDevices可以得到用户本机所有可用的摄像头设备列表,下面我们实现在Silverlight中启用用户本机的摄像头,首先在界面中添加一个用来显示视频的“容器”Grid,然后添加一个按钮用来启用CAM设备,如图所示。

    image

    XAML:

    1      <Border x:Name="LayoutRoot" CornerRadius="5"  
    2          BorderBrush="Gray" BorderThickness="3"> 
    3          <Border.Background> 
    4              <VideoBrush x:Name="myVideoBrush"/> 
    5          </Border.Background> 
    6          <Button x:Name="btnCam" HorizontalAlignment="Right" 
    7              VerticalAlignment="Bottom" 
    8              Width="120" Height="30"  
    9              Content="启动摄像头"/> 
    10     </Border> 

    C#:

    1          public VideoAndAudio() 
    2          { 
    3              InitializeComponent(); 
    4              this.btnCam.Click += new RoutedEventHandler(btnCam_Click); 
    5          } 
    6  
    7          void btnCam_Click(object sender, RoutedEventArgs e) 
    8          { 
    9              //取得默认视频设备对象 
    10             VideoCaptureDevice cam = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice(); 
    11             //创建视频捕获源对象 
    12             CaptureSource videoSource = new CaptureSource(); 
    13             //获取用户启用本机摄像头的许可 
    14             if (CaptureDeviceConfiguration.RequestDeviceAccess()) 
    15             { 
    16                 //设置视频设备 
    17                 videoSource.VideoCaptureDevice = cam; 
    18                 //设置视频来源 
    19                 myVideoBrush.SetSource(videoSource); 
    20                 myVideoBrush.Stretch = Stretch.Fill; 
    21                 //启动摄像头 
    22                 videoSource.Start(); 
    23             } 
    24         } 

    点击启用摄像头按钮后,Silverlight会提示用户是否允许应用程序访问你的本机视频设备。

    image

    用户选择是后,用户的视频内容就会立刻显示在Border的VideoBrush区域内,是不是很容易呢。

     

     

    image image 

                                    启用前                                                                     启用后

     

    Silverlight 4.0不但支持视频设备的显示,同时结合控件的截图功能,可以很方便的得到用户的照片,接下来加入截图代码。

    XAML:

    1      <StackPanel x:Name="LayoutRoot"> 
    2          <Border Height="350" x:Name="myBorder" CornerRadius="5"  
    3          BorderBrush="Gray" BorderThickness="3"> 
    4              <Border.Background> 
    5                  <VideoBrush x:Name="myVideoBrush"/> 
    6              </Border.Background> 
    7          </Border> 
    8          <StackPanel x:Name="tsp" Orientation="Horizontal"  
    9               Height="100"></StackPanel> 
    10         <StackPanel Orientation="Horizontal" Height="30"  
    11                 HorizontalAlignment="Center"> 
    12             <Button x:Name="btnCam" HorizontalAlignment="Right" 
    13             VerticalAlignment="Bottom" 
    14             Width="120" Height="30"  
    15             Content="启动摄像头"/> 
    16             <Button x:Name="btnCrop" HorizontalAlignment="Right" 
    17             VerticalAlignment="Bottom" 
    18             Width="120" Height="30"  
    19             Content="视频截图"/> 
    20         </StackPanel> 
    21     </StackPanel> 

    C#:

    1          void CropVideo() 
    2          { 
    3              //创建可写入位图对象 
    4              WriteableBitmap wBitmap = new WriteableBitmap(myBorder, new MatrixTransform()); 
    5              //创建一个图像 
    6              Image img = new Image(); 
    7              img.Width = 100; 
    8              img.Margin = new Thickness(2); 
    9              //将wBitmap做为图像源 
    10             img.Source = wBitmap; 
    11             //将图像添加到WrapPanel控件 
    12             tsp.Children.Add(img); 
    13         } 

    运行结果:

    image

    通过这种方式可以很方便的实现用户头像的上传,是不是很方便呢。

  • 相关阅读:
    CentOS配置bond
    rsync 06-sersync文件实时同步
    rsync 07-confxml.xml配置文件
    rsync 04-rsyncd启动脚本
    rsync 03-rsyncd.conf配置文件
    rsync 01-rsync命令使用
    rsync 02-部署rsync的daemon模式
    CentOS7升级OpenSSH
    iptables 02-CentOS7.x 启用iptables
    iptables 01-iptables命令
  • 原文地址:https://www.cnblogs.com/Areas/p/2195078.html
Copyright © 2020-2023  润新知