[Silverlight] 如何開啟視訊

2010/11/18

因為重點是寫如何擷取視訊圖片..
但是要先能夠開啟視訊...
其實很多老師都寫過如何開啟視訊...
這邊也不贅述單純筆記一下:

版面配置介紹:
sshot-156

因為許多範例都是用Image 去接視訊,我改程式用Canvas 去接用筆刷方式塗上去..
按下btnEnableWebCam之後就會啟動視訊


XAML Code :

<UserControl x:Class="UseWebCam.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">

    <Grid x:Name="LayoutRoot" Background="White">
        <Button Content="啟動WebCam" Height="23" HorizontalAlignment="Left" Margin="12,255,0,0" Name="btnEnableWebCam" VerticalAlignment="Top" Width="95" Click="btnEnableWebCam_Click" />
        <Canvas Height="197" HorizontalAlignment="Left" Margin="72,40,0,0" Name="cvsMain" VerticalAlignment="Top" Width="270" >
          
        </Canvas>
    </Grid>
</UserControl>


再來就是 C# Code 部份..


using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

namespace UseWebCam
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void btnEnableWebCam_Click(object sender, RoutedEventArgs e)
        {

            //RequestDeviceAccess()
            //要求存取用戶端系統上所有可用的擷取裝置 (音訊或視訊)。
            //如果使用者依據對存取要求對話方塊提示的回應授與裝置存取,或要求在某些情況下自動授與,則為 true。如果使用者未授與存取或存取遭其他因數拒絕,則為 false

            //AllowedDeviceAccess
            //取得值,這個值會報告使用者先前是否曾依據對裝置存取 UI 提示的儲存回應授與裝置存取。
            //如果使用者曾依據對存取要求對話方塊提示的回應授與裝置存取,或要求在某些情況下自動授與,則為 true。如果使用者未授與存取或存取遭其他因數拒絕,則為 false。
            if (CaptureDeviceConfiguration.RequestDeviceAccess() || CaptureDeviceConfiguration.AllowedDeviceAccess  )
            {
                CaptureSource captureSource = new CaptureSource();
                
                //製作一支影像的筆刷
                VideoBrush videoBrush = new VideoBrush();

                //將Canvas 背景換成那支筆刷
                this.cvsMain.Background = videoBrush;

                videoBrush.SetSource(captureSource);

                captureSource.Start();
                
            }
            else
            {
                MessageBox.Show("讀取視訊發生問題");
            }
           
        }
    }
}

說明我就寫在註解裡面了..

測試一下:

sshot-155

成功…

讚一下:


範例下載:



範例預覽:


0 意見:

程式 . 生活 . D小調.@2010 | Binary Design: One Winged Angel.