WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )
description
Transcript of WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )
![Page 1: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/1.jpg)
![Page 2: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/2.jpg)
![Page 3: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/3.jpg)
自己紹介イントロダクションMediaElementMediaPlayer独立モードとクロックモードビデオキャプチャ Q&A
WPFWPF で簡単ビデオ再生で簡単ビデオ再生
![Page 4: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/4.jpg)
WPF のビデオの概要MediaElement の使い方、特徴を理解MediaPlayer の使い方、特徴を理解簡単なビデオプレーヤーが作れる
今日帰るときには・・・今日帰るときには・・・
![Page 5: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/5.jpg)
![Page 6: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/6.jpg)
2000 ごろは、 Java/Unix 系でしたMicrosoft は嫌いだったので、 2000-2002 ぐらいまで、 Java/Unix 系で Web Server を立てて、 HP を作っていた。日曜管理者なので、カーネルのメインテナンスに疲れ果てた。少し金を払ってもいいから、楽にサーバーを運用したかったので、 Windows 系に乗り換えた。
Windows 系の開発をしたことがなかったのでVisual Studio 2002 C# Beta が出たので、触ってみた。すげー!!
コミュニティいろいろな素晴らしい人と出会える。面白い!理屈はいらないでしょ。
なんで、そんなことしているの?なんで、そんなことしているの?
![Page 7: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/7.jpg)
2002 年に Visual Studio 2002 Beta が出たBeta はタダだったので、使ってみた。.NET/C# のすごさに触発された。わからないことがいろいろあるが、 C#/.NET 関連の日本語 HP がほとんどなかった。せっかく調べたのに、忘れてしまうともったいなので、少しづつまとめて、宇宙仮面の C# プログラミングというページを作成していた。すこしづつ C# ユーザーが増え、掲示板にも書きこまれるようになった。.NET/C# Group を開始どなたかが、 MVP に推薦してくれたらしい。最初、マルチ商法みたいで怖かったから、テキトーにあしらっていた。Microsoft KK から直接説明があったので、お受けすることに。2003/10 MVP for Visual Developer C# 受賞
MVPMVP を受賞したきっかけは?を受賞したきっかけは?
![Page 8: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/8.jpg)
![Page 9: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/9.jpg)
WPF でビデオ・音声メディアを再生するには、 MediaElement 、または MediaPlayer を使います。それぞれ特徴があるので、しっかり押さえておきたい。
MediaElement は、 WPF に統合されているので、アルファブレンディングや 3D の表面にレンダリングも可能
MediaPlayer には直接的なビジュアル表現がないので、レイアウト上は直接使えません。しかし、 Windows Media Player ランタイムを起動する必要がないため、高速に起動できます。また、ビジュアル表現がないので、音声の再生にも適しています。
MediaElement MediaElement と と MediaPlayerMediaPlayer
![Page 10: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/10.jpg)
![Page 11: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/11.jpg)
<Windowxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"x:Class="WpfApplication3.Window1"x:Name="Window"Title="Window1"Width="320" Height="240" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">
<Grid> <MediaElement Source="Test.wmv"
LoadedBehavior="Play"/> </Grid></Window>
MediaElementMediaElement により、単純にビデオを再生により、単純にビデオを再生
![Page 12: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/12.jpg)
![Page 13: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/13.jpg)
Expression Blend を使用してメディアを再生する WPF プロジェクトを簡単に作ることができます。
1. WMV などのメディアをプロジェクトに追加する。2. WMV ファイルをダブルクリックするか、フォーム上に Drag & Drop する。
Expression Blend Expression Blend によるによる WPF WPF プロジェクトの自動生成プロジェクトの自動生成
![Page 14: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/14.jpg)
<Window ・・・ >
<Window.Resources>
<Storyboard x:Key="Test_wmv">
<MediaTimeline Source="Test.wmv" BeginTime="00:00:00" Storyboard.TargetName="Test_wmv" d:DesignTimeNaturalDuration="233.129"/>
</Storyboard>
</Window.Resources>
<Window.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard Storyboard="{StaticResource Test_wmv}"/>
</EventTrigger>
</Window.Triggers>
<Grid x:Name="LayoutRoot">
<MediaElement Margin="62,46,255,78" x:Name="Test_wmv" Stretch="Fill"/>
</Grid>
</Window>
Expression Blend Expression Blend によるによる WPF WPF プロジェクトの自動生成プロジェクトの自動生成
![Page 15: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/15.jpg)
![Page 16: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/16.jpg)
ストリーボードなしのシンプルな XAML が生成されます。Silverlight2 では、まだ MediaTimeline がサポートされていません。
<UserControlxmlns="http://schemas.microsoft.com/client/2007"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"x:Class="SilverlightApplication6.Page"Width="320" Height="240">
<Grid x:Name="LayoutRoot" Background="White" ><MediaElement x:Name="Test_wmv"
Source="Test.wmv" Stretch="Fill"/></Grid>
</UserControl>
Silverlight2 Silverlight2 によるによる WPF WPF プロジェクトの自動生成プロジェクトの自動生成
![Page 17: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/17.jpg)
![Page 18: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/18.jpg)
MediaElement コントロールは System.Windows.UIElement クラスから継承されているので、他の UIElement コントロールを配置できるところであればどこでも配置できます。
WPF WPF コントロールの内部にビデオを埋め込むコントロールの内部にビデオを埋め込む
<Button Click="Button_Click"><MediaElement
x:Name="Test_wmv“LoadedBehavior="Manual”Source="Test.wmv" Stretch="Fill“ />
</Button>-----------// C# 再生用コードthis.Test_wmv.Play();
![Page 19: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/19.jpg)
![Page 20: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/20.jpg)
MediaElement の MediaOpened でプログレスバーの最大値を設定Storyboard の CurrentTimeInvalidated でプログレスバーの値を設定する
プログレスバーの表示プログレスバーの表示
<MediaElement Name="myMedia" MediaOpened="myMedia_MediaOpened"/>
…<Storyboard Storyboard.TargetName="myMedia"
CurrentTimeInvalidated="Storyboard_CurrentTimeInvalidated">
<MediaTimeline Source="Test.wmv" x:Name="mTimeline" BeginTime="00:00:00" Duration="00:10:05" /> </Storyboard>
![Page 21: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/21.jpg)
C# 実装部分
プログレスバーの表示プログレスバーの表示
private void Storyboard_CurrentTimeInvalidated(…) { this.progressBar1.Value =
myMedia.Position.TotalMilliseconds;}
private void myMedia_MediaOpened(...){ this.progressBar1.Maximum =
myMedia.NaturalDuration.TimeSpan.TotalMilliseconds;}
![Page 22: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/22.jpg)
![Page 23: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/23.jpg)
注意:メディアを対話的に停止、一時停止、および再生できるようにするには、
MediaElement の LoadedBehavior プロパティを Manual に設定する必要があります。
再生: myMediaElement.Play();停止: myMediaElement.Stop();一時停止: myMediaElement.Pause();再生位置の変更 :
TimeSpan ts = new TimeSpan(0, 0, 0, 0, SliderValue); myMediaElement.Position = ts;ボリュームの変更: myMediaElement.Volume =
(double)volumeSlider.Value;再生スピードの調整: myMediaElement.SpeedRatio =
(double)speedRatioSlider.Value;
再生、停止、一時停止、再生位置の変更、ボリュームの変再生、停止、一時停止、再生位置の変更、ボリュームの変更、再生スピードの調整更、再生スピードの調整
![Page 24: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/24.jpg)
![Page 25: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/25.jpg)
MediaElement を使用した場合、 Windows Media Player ランタイムを起動する必要があるため、メディアを最初に再生するときに、遅延が生じる場合があります。このため、メディア ファイルとユーザー イベントやアニメーションと正確に同期を取って再生することができません。
対策1. メディア ファイルを事前に読み込み、使用準備が整うまで一時停止状態にしておく。2. <Storyboard SlipBehavior="Slip"> を指定します。すると、メディアの再生が開始するまで、アニメーションが停止してくれます。
再生時の遅延対策再生時の遅延対策
![Page 26: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/26.jpg)
ModelVisual3D の中で、 VisualBrush の MediaElement ソースにメディアファイルを指定します。
<GeometryModel3D.Material><DiffuseMaterial> <DiffuseMaterial.Brush> <VisualBrush> <VisualBrush.Visual> <MediaElement Source="Test.wmv" /> </VisualBrush.Visual> </VisualBrush> </DiffuseMaterial.Brush></DiffuseMaterial></GeometryModel3D.Material>
ビデオを ビデオを 3D 3D の表面にマップするの表面にマップする
![Page 27: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/27.jpg)
![Page 28: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/28.jpg)
![Page 29: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/29.jpg)
メディアを再生するもう一つの方法として、 MediaPlayer があります。MediaElement は、基本的に MediaPlayer クラスのラッパーなので、 MediaElement で実現できることは MediaPlayer で実現できます。
MediaPlayer は- 音楽を再生する- より複雑な処理に使用します。
MediaPlayer MediaPlayer の用途の用途
![Page 30: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/30.jpg)
MediaPlayer のプロパティや、イベントを設定することにより、たとえば次のような操作が可能です。メディア ファイルの位置を取得または設定 Position プロパティに TimeSpan オブジェクトを設定します。
例バッファリングの進行状況 BufferingProgress プロパティ再生の進行状況 DownloadProgress プロパティオーディオ コントロール Balance プロパティ、
Volume プロパティを設定メディアの開始を知る MediaOpened イベントメディアの終了を知る MediaEnded イベント
主なプロパティ主なプロパティ
![Page 31: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/31.jpg)
WAV オーディオだけの再生であれば、 System.Media.SoundPlayer クラスが利用できます。
いろいろな種類の音楽を再生するには、 MediaPlayer クラスを使用するのが良いでしょう。
MediaPlayer mp = new MediaPlayer();
Try
{
mp.Open(new Uri(@"..\..\Test.wma", UriKind.Relative));mp.Play();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);}
ビデオを ビデオを 3D 3D の表面にマップするの表面にマップする
![Page 32: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/32.jpg)
<Rectangle Stroke="Black" MouseDown="OnClick1" …> <Rectangle.RenderTransform> <TransformGroup>
… </TransformGroup> </Rectangle.RenderTransform> <Rectangle.Fill> <DrawingBrush> <DrawingBrush.Drawing> <VideoDrawing x:Name="MyVideoDrawing“… /> </DrawingBrush.Drawing> </DrawingBrush> </Rectangle.Fill> </Rectangle>
MediaPlayer, DrawingBrush MediaPlayer, DrawingBrush を使って、ビデオをコントを使って、ビデオをコントロールに描画するロールに描画する
![Page 33: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/33.jpg)
C# 実装部分
void OnClick1(object sender, RoutedEventArgs e){
MediaPlayer MyPlayer = new MediaPlayer();MyPlayer.Open(new Uri(@“..\..\Test.wmv”, UriKind.Relative));MyVideoDrawing.Player = MyPlayer;
MyPlayer.Play();}
MediaPlayer, DrawingBrush MediaPlayer, DrawingBrush を使って、ビデオをコントを使って、ビデオをコントロールに描画するロールに描画する
![Page 34: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/34.jpg)
![Page 35: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/35.jpg)
22 つのビジュアルに同時プレイつのビジュアルに同時プレイ
![Page 36: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/36.jpg)
void OnLoaded(object sender, RoutedEventArgs e) { MediaPlayer MyPlayer = new MediaPlayer(); MyPlayer.Open(new Uri(@"..\..\Test.wmv",
UriKind.Relative)); MyVideoDrawing.Player = MyPlayer; MyVideoDrawing1.Player = MyPlayer; MyPlayer.Play(); }
C# 実装部分
![Page 37: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/37.jpg)
![Page 38: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/38.jpg)
![Page 39: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/39.jpg)
MediaElement 、および MediaPlayer は、独立モードとクロック モードの 2 つのモードがあります。 通常の再生だけであれば、独立モードで OK です。
独立モード <MediaElement Source="Test.wmv" Width="320" Height="240" LoadedBehavior="Play"/>
クロックモードExpression Blend で、メディアを追加した場合、クロックモードで WPF が生成されます。
独立モードとクロックモード独立モードとクロックモード
![Page 40: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/40.jpg)
MediaElement はイメージに似ており、直接 Source URI を指定できます。標準のメディアを再生および制御する場合、 Storyboard や MediaTimeline を扱う必要はありません。通常の再生だけであれば、独立モードで OK です。Clock が null の場合、メディア オブジェクトは独立モードです。特徴- メディアの Uri を直接指定することができます。- メディアの再生を直接制御できます。- メディアの Position プロパティと SpeedRatio プロパティを変更できます。独立モードの例
<MediaElement Source="Test.wmv" Width="320" Height="240" LoadedBehavior="Play"/>
Clock Clock が が null null の場合の場合
![Page 41: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/41.jpg)
MediaElement は、 MediaTimeline によって、メディアの再生が実行されます。
特徴- メディアの Uri は、 MediaTimeline を通じて間接的に設定されます。- メディアの再生をクロックで制御できます。メディア オブジェクトのコントロール メソッドは使用できません。
Expression Blend で、メディアを追加した場合、クロックモードで WPF が生成されます。ClockController プロパティを使用すれば、対話形式でクロックを開始、 一時停止、再開、シーク、区間の最後までの前進、停止ができます。
Clock Clock が が Null Null ではない場合ではない場合
![Page 42: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/42.jpg)
private void Button_Click(object sender, RoutedEventArgs e) {
this.Test_wmv.Clock.Controller.Pause(); // クロックの Pause
}
private void Button_Click_1(object sender, RoutedEventArgs e) {
this.Test_wmv.Clock.Controller.Seek(new TimeSpan(0, 0, 30), TimeSeekOrigin.BeginTime); // クロックをシーク
this.Test_wmv.Clock.Controller.Resume();
}
private void Window_Loaded(object sender, RoutedEventArgs e) {
MediaTimeline mTimeline =
new MediaTimeline(new Uri(@"..\..\Test.wmv", UriKind.Relative));
MediaClock mClock = mTimeline.CreateClock();
this.Test_wmv.Clock = mClock;
this.Test_wmv.Clock.Controller.Begin();
}
クロックモードクロックモード
![Page 43: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/43.jpg)
![Page 44: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/44.jpg)
![Page 45: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/45.jpg)
<Rectangle Stroke="Black" MouseLeftButtonDown="Rectangle_MouseDown" RenderTransformOrigin="0.5,0.5" Margin="102,11,14,0" Height="89.305" VerticalAlignment="Top">
<Rectangle.RenderTransform> <TransformGroup> </TransformGroup> </Rectangle.RenderTransform> <Rectangle.Fill> <DrawingBrush> <DrawingBrush.Drawing> <VideoDrawing x:Name="MyVideoDrawing…/> </DrawingBrush.Drawing> </DrawingBrush> </Rectangle.Fill> </Rectangle>
<Image Height="30" HorizontalAlignment="Left“ Name="image1" Stretch="Fill" VerticalAlignment="Top" Width="72" />
![Page 46: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/46.jpg)
MediaPlayer MyPlayer = new MediaPlayer();
private void Rectangle_MouseDown(…) {
MyPlayer.Open(new Uri(@"..\..\Test.wmv", UriKind.Relative));
MyVideoDrawing.Player = MyPlayer;
MyPlayer.Play();
}
private void button1_Click(…) {
RenderTargetBitmap rtb = new RenderTargetBitmap((int)image1.Width, (int)image1.Height, 1 / 200,
1 / 200, PixelFormats.Pbgra32);
DrawingVisual dv = new DrawingVisual();
DrawingContext dc = dv.RenderOpen();
dc.DrawVideo(MyPlayer, new Rect(0, 0, (int)image1.Width, (int)image1.Height));
dc.Close();
rtb.Render(dv);
this.image1.Source = BitmapFrame.Create(rtb);
using (FileStream stream = new FileStream("capture.png", FileMode.Create)) {
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(rtb));
encoder.Save(stream);
}
}
}
C# C# 実装部分実装部分
![Page 47: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/47.jpg)
![Page 48: WPF で簡 単ビデオ再生 2008 年 5 月 27 日 ( 火 )](https://reader033.fdocument.pub/reader033/viewer/2022061605/56814f09550346895dbc9bbc/html5/thumbnails/48.jpg)
宇宙仮面の C# http://uchukamen.com
MSDN MediaElement クラスhttp://msdn.microsoft.com/ja-jp/library/system.windows.controls.mediaelement.aspx
WPF を使ってコントロールと 3D の表面にビデオを追加するhttp://msdn.microsoft.com/ja-jp/magazine/cc163455.aspx