ページの構成
プログラムの解説に移る前に今回作成するアプリケーションの概要と、サンプルページの構成を確認しておきましょう。
図2は今回作成するサンプルの動作イメージです。
サンプル画面は、実際にカメラの情報を表示する表示部と、キャプチャーの開始、停止、チャプターの取得、キャプチャーした音声を保存する操作部、チャプターごとのイメージを並べるチャプター部からなります。リスト1は今回のサンプルのページ定義です。
<navigation:Page x:Class="Slverlight4_2Sample.Views.WebCamSample" 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" xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation" d:DesignWidth="640" d:DesignHeight="480" Title="WebCamSample Page"> <StackPanel x:Name="LayoutRoot"> <Rectangle Width="200" Height="200" Fill="Blue" x:Name="webCamDisplay" /> <StackPanel Orientation="Horizontal"> <Button Content="開始" Click="btnStart_Click" /> <Button Content="停止" x:Name="btnStop" Click="btnStop_Click" /> <Button Content="画像の切取" Click="btnCapture_Click" /> <Button Content="音声の保存" Click="btnCaptureAudio_Click" /> </StackPanel> <StackPanel HorizontalAlignment="Center"> <ListBox x:Name="captureImages"> <ListBox.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel Orientation="Horizontal" /> </ItemsPanelTemplate> </ListBox.ItemsPanel> </ListBox> </StackPanel> </StackPanel> </navigation:Page>
画面の構成自体は特に問題になるところはないでしょう。後述しますが、ビデオデバイスから取得した動画データは、VideoBrushクラスでSilverlightのさまざまな要素に表示できます。今回は、webCamDisplayという名前を持つRectangleクラスに、ビデオデバイスから取得した動画を表示させています。
デバイスから取得した動画の表示
リスト2に、デバイスから取得した動画を表示するサンプルを示します。
private CaptureSource _captureSource = null; // キャプチャーの開始ボタンのイベントハンドラー private void btnStart_Click(object sender, RoutedEventArgs e) { // 1.デバイスへのアクセス許可を調査する。 if (!( CaptureDeviceConfiguration.AllowedDeviceAccess || CaptureDeviceConfiguration.RequestDeviceAccess())) { MessageBox.Show("デバイスの起動に失敗しました。"); return; } // 2.デバイスを操作するためのCaptureSourceを作成する。 _captureSource = new CaptureSource() { VideoCaptureDevice = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice(), AudioCaptureDevice = CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice(), }; // 3.ビデオブラシを作成し、動画を表示する。 var brush = new VideoBrush(); brush.SetSource(_captureSource); webCamDisplay.Fill = brush; // 4.ビデオデバイスからデータの取得を開始する。 _captureSource.Start(); } // キャプチャーのストップボタンのイベントハンドラー private void btnStop_Click(object sender, RoutedEventArgs e) { if (_captureSource != null) _captureSource.Stop(); }