<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>川西 裕幸のブログ : Win32</title><link>http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx</link><description>Tags: Win32</description><dc:language>ja-JP</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>同時実行コンテナ in VS2010 Beta 2</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/11/02/9915988.aspx</link><pubDate>Mon, 02 Nov 2009 01:21:03 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9915988</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9915988.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9915988</wfw:commentRss><description>&lt;p&gt;スレッドセーフでロックフリーのデータコレクション（同時実行コンテナ）concurrent_queueとconcurrent_vector は、PDC 08で紹介されていましたが、Visual Studio 2010 Beta 1 には実装されていませんでした。&lt;/p&gt;  &lt;p&gt;Parellel Programming for Native Code ブログ「&lt;a href="http://blogs.msdn.com/nativeconcurrency/archive/2009/10/29/what-s-new-in-beta-2-for-the-concurrency-runtime-parallel-pattern-library-and-asynchronous-agents-library.aspx"&gt;What’s new in Beta 2 for the Concurrency Runtime, Parallel Pattern Library and Asynchronous Agents Library&lt;/a&gt;」によると、Beta 2 にはこの2つのコンテナが入っているとのことです。&lt;/p&gt;  &lt;p&gt;このブログではそれ以外の Beta 2 での更新内容（デバッグ、ドキュメント、task_groupなど）も紹介されています。&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9915988" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Parallel/default.aspx">Parallel</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>Dolby Digital CODEC @ Windows 7</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/09/15/9895213.aspx</link><pubDate>Tue, 15 Sep 2009 04:50:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9895213</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9895213.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9895213</wfw:commentRss><description>&lt;p&gt;Windows 7 上の &lt;a href="http://ja.wikipedia.org/wiki/%E3%83%89%E3%83%AB%E3%83%93%E3%83%BC%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB"&gt;Dolby Digital&lt;/a&gt; CODEC（AC-3など）には制限があるので、独自のメディア アプリケーションを開発される方は、注意してください。SDK ドキュメント「&lt;a href="http://msdn.microsoft.com/en-us/library/dd390676(VS.85).aspx"&gt;Microsoft MPEG-1/DD/AAC Audio Decoder&lt;/a&gt;」によると、以下のように記述されています。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&amp;#160; The Microsoft implementation of the Dolby Digital technology is restricted under terms of the Dolby Digital licensing program to use by Microsoft applications.&lt;/p&gt;  &lt;p&gt;つまり、Windows 7 に搭載されている、マイクロソフトが実装した AC-3 デコーダー（DirectShow フィルター）は、マイクロソフト製品（たとえば Windows Media Player）以外では使うことができません。&lt;/p&gt;  &lt;p&gt;したがって、AC-3 でエンコードされたメディアを再生したいアプリケーション開発者は Dolby Digital からライセンスを取得し、デコーダーを実装する必要があります。&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9895213" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>DirectX SDK (August 2009)</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/09/10/9893416.aspx</link><pubDate>Thu, 10 Sep 2009 03:53:37 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9893416</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9893416.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9893416</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=b66e14b8-8505-4b17-bf80-edb2df5abad4"&gt;DirectX SDK (August 2009)&lt;/a&gt; が公開されました。以下の更新が行われています。&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Direct3D 11 RTM&lt;/li&gt;    &lt;li&gt;ゲーム開発者用の Direct3D 11 の配置&lt;/li&gt;    &lt;li&gt;Effect 11&lt;/li&gt;    &lt;li&gt;Direct3D コンピュート シェーダー拡張 (D3DCSX)&lt;/li&gt;    &lt;li&gt;新しいサンプルと更新&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;基本&lt;/li&gt;      &lt;li&gt;シャドウ&lt;/li&gt;      &lt;li&gt;コンピュート シェーダー&lt;/li&gt;      &lt;li&gt;テセレーション&lt;/li&gt;      &lt;li&gt;BC6H.BC7 テクスチャ圧縮&lt;/li&gt;      &lt;li&gt;DDSファイル形式&lt;/li&gt;      &lt;li&gt;Direct3D 10.1&lt;/li&gt;      &lt;li&gt;Windows 7 タッチ メッセージ&lt;/li&gt;      &lt;li&gt;Games for Windows Showcase S.6 (Direct3D 10 サンプル）&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;Games for Windows 技術要件とテスト要件の更新&lt;/li&gt;    &lt;li&gt;XNA テストケース ツールの更新&lt;/li&gt;    &lt;li&gt;XNA 算術演算（Math）の改善&lt;/li&gt;    &lt;li&gt;DirectX SDK ユーティリティの更新&lt;/li&gt;    &lt;li&gt;ドキュメントの更新&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9893416" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Direct3D/default.aspx">Direct3D</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>Windows 7 ハンズオン ラボ ～Direct2D, DirectWrite~</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/09/04/9891202.aspx</link><pubDate>Fri, 04 Sep 2009 07:00:50 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9891202</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9891202.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9891202</wfw:commentRss><description>&lt;p&gt;Windows 7 の新しい Win32 APIである Direct2D と DirectWrite の実装を自習できるハンズオン ラボが公開されました。内容は以下の通りです。&lt;/p&gt;  &lt;h4&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/windows/ee427969.aspx"&gt;Direct2D&lt;/a&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;描画用のターゲットを作成し、これを使用して、スクリーンへ描画する &lt;/li&gt;    &lt;li&gt;幾何学図形のオブジェクトを使用して、図形を描画し、これにグラデーションを付ける &lt;/li&gt;    &lt;li&gt;GDI サーフェイスに Direct2D のコンテンツを描画する方法を用いて、GDI ベースのアプリケーションのグラフィックス描画を強化する&lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;&lt;a href="http://msdn.microsoft.com/ja-jp/windows/ee426939.aspx"&gt;DirectWrite&lt;/a&gt;&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;DirectWrite API を使用して、テキストの整形と配置を行う &lt;/li&gt;    &lt;li&gt;Direct2D API を使用して、テキストの描画を行う &lt;/li&gt;    &lt;li&gt;DirectWrite API のいつくかの異なる方法で描画する &lt;/li&gt;    &lt;li&gt;Direct2D API を介して、テキストをグラフィックスとして扱う &lt;/li&gt;    &lt;li&gt;テキストのカスタム レンダリング (custom text renderer) を実装する&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9891202" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>Win32, Silverlight 3, WPF 4 の Windows 7 マルチタッチへの対応</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/07/27/9849673.aspx</link><pubDate>Mon, 27 Jul 2009 08:48:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9849673</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9849673.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9849673</wfw:commentRss><description>&lt;p&gt;Windows 7 の新機能にマルチタッチがあります。Win32, Silverlight 3, WPF 4 はそれぞれ Windows 7 マルチタッチに対応していますが、それぞれ特徴があるのでここでまとめます。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd562197(VS.85).aspx"&gt;Win32&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd317341(VS.85).aspx"&gt;WM_TOUCH&lt;/a&gt; メッセージは最も下位レベルのメッセージで（生のメッセージ）、複数のタッチIDと位置などが取得できます。Win32 でこのメッセージを受け取るには RegisterTouchWindow を呼び出す必要があります。 &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd353242(VS.85).aspx"&gt;WM_GESTURE&lt;/a&gt; メッセージは上位レベルのメッセージで、パン・ズーム・回転の情報を取得できます。Win32 ではデフォルトでこのメッセージを受け取れますが、RegisterTouchWindow を呼び出すと WM_TOUCH しか受け取れません、つまり WM_TOUCH と WM_GESTURE は排他です。 &lt;/li&gt;    &lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd317309(VS.85).aspx"&gt;Manipulation &amp;amp; Inertia&lt;/a&gt; は WM_TOUCHと組み合わせて、ManipulationEventSink を実装することによって、移動や回転の慣性や減衰の処理ができます。 &lt;/li&gt;    &lt;li&gt;Windows 7 SDK にサンプルがあります。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd894494(VS.95).aspx"&gt;Silverlight 3&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Silverlight 3 は WM_TOUCH にのみ対応します。 &lt;/li&gt;    &lt;li&gt;マルチタッチを処理するには、UIElementのようなオブジェクトにイベントハンドラーを追加するのではなく、System.Windows.Input.Touch.FrameReported にTouchFrameEventHandler イベントハンドラーを追加します。 &lt;/li&gt;    &lt;li&gt;そのコールバック内で、TouchFrameEventArg の GetPrimaryTouchPoint メソッドなどを使ってタッチポイントを取得します。 &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/07/10/silverlight-3-quick-tip-multitouch-support-on-windows-7.aspx"&gt;DevCorner&lt;/a&gt;にサンプルがあります。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/bb613588(VS.100).aspx"&gt;WPF ４&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Beta 1 では WM_TOUCH に対応していません（Beta 2 から対応予定）。 &lt;/li&gt;    &lt;li&gt;WPF ４ では Maniputaion &amp;amp; Inertia と WM_GESTURE が統合されています（Gestureという用語が使われていないので、分かりにくくなっています）。&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationmode(VS.100).aspx"&gt;UIElement.ManipulationMode&lt;/a&gt; に Translate, Scale, Rotate などを設定することにより、パン・ズーム・回転を処理できます。 &lt;/li&gt;    &lt;li&gt;OnManipulationStarted や OnManipulationDelta、あるいはOnInertiaStarted などをオーバーライドして、それぞれの動きを実装します。 &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=752CB725-969B-4732-A383-ED5740F02E93&amp;amp;displaylang=en"&gt;Visual Studio 2010 and .NET Framework 4 Training Kit - May Preview&lt;/a&gt; にサンプルがあります。 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;まとめるとこんな感じです。&lt;/p&gt;  &lt;table style="width: 421px; height: 100px" border="1" cellspacing="0" cellpadding="2" width="421"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="90"&gt;&amp;#160;&lt;/td&gt;        &lt;td valign="top" width="105" align="center"&gt;WM_TOUCH&lt;/td&gt;        &lt;td valign="top" width="88" align="center"&gt;WM_GESTURE&lt;/td&gt;        &lt;td valign="top" width="84" align="center"&gt;Manip&amp;amp;Inertia&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="90"&gt;Win32&lt;/td&gt;        &lt;td valign="top" width="105" align="center"&gt;〇&lt;/td&gt;        &lt;td valign="top" width="88" align="center"&gt;◎&lt;/td&gt;        &lt;td valign="top" width="84" align="center"&gt;〇&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="90"&gt;Silverlight 3&lt;/td&gt;        &lt;td valign="top" width="105" align="center"&gt;〇&lt;/td&gt;        &lt;td valign="top" width="88" align="center"&gt;×&lt;/td&gt;        &lt;td valign="top" width="84" align="center"&gt;×&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="90"&gt;WPF 4(Beta1)&lt;/td&gt;        &lt;td valign="top" width="105" align="center"&gt;× (Beta2で対応)&lt;/td&gt;        &lt;td valign="top" colspan="2" align="center"&gt;〇&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9849673" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+Presentation+Foundation/default.aspx">Windows Presentation Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>食事する哲学者の問題を Asynchronous Agents で解決する（MSDNマガジン6月号）</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/07/20/9840959.aspx</link><pubDate>Mon, 20 Jul 2009 08:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9840959</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9840959.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9840959</wfw:commentRss><description>&lt;P&gt;やはり MSDN マガジン 6月号に「&lt;A href="http://msdn.microsoft.com/ja-jp/magazine/dd882512.aspx" mce_href="http://msdn.microsoft.com/ja-jp/magazine/dd882512.aspx"&gt;食事する哲学者の問題を Asynchronous Agents で解決する&lt;/A&gt;」が掲載されています。C++ PPL（Parallel Pattern Library）と Asynchorouns Agents Library による非同期エージェントを使った、メッセージ渡しによる並列プログラミングの解説です。&lt;STRIKE&gt;OpenMP と PPL との比較も少し載っています。&lt;/STRIKE&gt;&lt;/P&gt;
&lt;P&gt;特徴的なのは、この問題に対してよく使われる、明示的なロックやスレッド API を直接的には使わずに解決していることです。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9840959" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Parallel/default.aspx">Parallel</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>WPF MediaKit @ codeplex</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/07/17/9836430.aspx</link><pubDate>Fri, 17 Jul 2009 05:39:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9836430</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9836430.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9836430</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://wpfmediakit.codeplex.com/"&gt;WPF MediaKit&lt;/a&gt; では、DirectShow や MediaElement を WPF で使えるようにしています。作者は &lt;a href="http://jmorrill.hjtcentral.com/"&gt;Jeremiah Morrill&lt;/a&gt; です。&lt;/p&gt;  &lt;p&gt;例えば DvdPlayerElement 要素とか VideoCaptureElement があり、以下のように使えます。&lt;/p&gt; &lt;form id="aspnetForm" enctype="multipart/form-data" method="post" name="aspnetForm" action="http://wpfmediakit.codeplex.com/" autocomplete="off"&gt;   &lt;table id="CanvasTable" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr valign="top"&gt;         &lt;td&gt;           &lt;div id="Canvas"&gt;             &lt;div id="CanvasContent"&gt;               &lt;div id="ProjectBody" class="SiteContent"&gt;                 &lt;table class="SiteContentTable" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;                     &lt;tr valign="top"&gt;                       &lt;td class="MainContent"&gt;                         &lt;div class="MainContentMinWidthContent"&gt;                           &lt;div id="ctl00_ctl00_MasterContent_ProjectContentPanel" class="ProjectContent"&gt;                             &lt;table cellspacing="0" cellpadding="0" width="100%"&gt;&lt;tbody&gt;                                 &lt;tr&gt;                                   &lt;td valign="top"&gt;                                     &lt;div id="ctl00_ctl00_MasterContent_ContentPanel" class="Content"&gt;                                       &lt;div class="WikiHolder"&gt;                                         &lt;div id="ctl00_ctl00_MasterContent_Content_WikiContent" class="WikiContent"&gt;&lt;span id="ctl00_ctl00_MasterContent_Content_wikiSourceLabel"&gt;                                             &lt;div class="wikidoc"&gt;                                               &lt;div style="background-color: white; color: black"&gt;                                                 &lt;pre&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;WPFMediaKit&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;VideoCaptureElement&lt;/span&gt; &lt;span style="color: red"&gt;x:Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;videoCapElement&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;
       &lt;span style="color: red"&gt;LoadedBehavior&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;Play&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;
       &lt;span style="color: red"&gt;DesiredPixelWidth&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;320&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;
       &lt;span style="color: red"&gt;DesiredPixelHeight&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;240&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;
       &lt;span style="color: red"&gt;Stretch&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;Fill&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;
       &lt;span style="color: red"&gt;VideoCaptureSource&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;{Binding Path=CaptureDeviceName}&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;
       &lt;span style="color: red"&gt;FPS&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;30&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
                                              &lt;/div&gt;
                                            &lt;/div&gt;
                                          &lt;/span&gt;&lt;/div&gt;
                                      &lt;/div&gt;
                                    &lt;/div&gt;
                                  &lt;/td&gt;
                                &lt;/tr&gt;
                              &lt;/tbody&gt;&lt;/table&gt;
                          &lt;/div&gt;
                        &lt;/div&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/tbody&gt;&lt;/table&gt;
              &lt;/div&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;&lt;/table&gt;
&lt;/form&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9836430" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+Presentation+Foundation/default.aspx">Windows Presentation Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>Direct2D の紹介 (MSDNマガジン6月号)</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/07/15/9833820.aspx</link><pubDate>Wed, 15 Jul 2009 07:26:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9833820</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9833820.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9833820</wfw:commentRss><description>&lt;p&gt;MSDNマガジン6月号に「&lt;a href="http://msdn.microsoft.com/ja-jp/magazine/dd861344.aspx"&gt;Direct2Dの紹介&lt;/a&gt;」記事が載っています。&lt;/p&gt;  &lt;p&gt;GDI, D3D, WPFなどとの比較もあります。&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9833820" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Direct3D/default.aspx">Direct3D</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>Media Foundation ⑥ WebCam + WPF XAMLとC#の実装</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/07/07/9821139.aspx</link><pubDate>Tue, 07 Jul 2009 04:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9821139</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9821139.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9821139</wfw:commentRss><description>&lt;P&gt;それでは XAMLとC#を実装しましょう。次のようにビデオ画像と、スライダーで回転・スケールを行うので、XAMLではD3DImageと2つのスライダー（とラベル）を宣言します。一つのスライダーはD3DImageの回転角度に、もう一つはD3DImageのXScaleとYScaleにバインディングします。&lt;/P&gt;
&lt;P&gt;D3DImageはSystem.Windows.Interop名前空間にあるので、名前空間の追加に注意してください。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/MediaFoundationWebCamWPFXAMLC_CC85/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/MediaFoundationWebCamWPFXAMLC_CC85/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/MediaFoundationWebCamWPFXAMLC_CC85/image_thumb_1.png" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/MediaFoundationWebCamWPFXAMLC_CC85/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H4&gt;C#の実装&lt;/H4&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 8pt; mso-bidi-font-size: 11.0pt" lang=EN-US&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/hiroyuk/archive/2009/03/30/9517928.aspx" mce_href="http://blogs.msdn.com/hiroyuk/archive/2009/03/30/9517928.aspx"&gt;D3DImage チュートリアル&lt;/A&gt;との違いは、初期化時にビデオのサイズを取得していることと、Rendering イベントハンドラーとコールバックを宣言する代わりに、&lt;STRONG&gt;Windows メッセージを処理するためのコールバック&lt;/STRONG&gt;（ここではBltVideo）を HWndSourceクラスのAddHookメソッドを使って宣言することです。そのあとで一回目の非同期サンプリング命令（Sample）を呼び出します。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;SPAN style="COLOR: blue"&gt;readonly&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;D3DWrapper&lt;/SPAN&gt; myD3DScene = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;D3DWrapper&lt;/SPAN&gt;(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: #2b91af; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&lt;STRONG&gt;HwndSource&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&lt;STRONG&gt; source;&lt;/STRONG&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;const&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; WM_PAINT = 0x000F; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;int&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; videoWidth = 0; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;int&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; videoHeight = 0;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; mso-layout-grid-align: none" class=MsoNormal align=left&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;... &lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; mso-layout-grid-align: none" class=MsoNormal align=left&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; StartDXRendering() &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;{ &lt;BR&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; (!myD3DImage.IsFrontBufferAvailable) &lt;BR&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;return&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: #2b91af; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;IntPtr&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; scene = myD3DScene.Initialize( &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; new&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;SPAN style="COLOR: #2b91af"&gt;WindowInteropHelper&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;).Handle, &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; ref&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; videoWidth, &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; ref&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; videoHeight); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;myD3DImage.Lock(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;myD3DImage.SetBackBuffer( &lt;BR&gt;&lt;SPAN style="COLOR: #2b91af"&gt;D3DResourceType&lt;/SPAN&gt;.IDirect3DSurface9, scene); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; myD3DImage.Unlock(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&lt;STRONG&gt;source = &lt;SPAN style="COLOR: #2b91af"&gt;HwndSource&lt;/SPAN&gt;.FromHwnd( &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;WindowInteropHelper&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;).Handle); &lt;BR&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&lt;STRONG&gt;source.AddHook(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;HwndSourceHook&lt;/SPAN&gt;(BltVideo)); &lt;BR&gt;myD3DScene.Sample();&lt;/STRONG&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;}&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; mso-bidi-font-size: 11.0pt" lang=EN-US&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;BltVideo では WM_PAINT メッセージかどうかを確認して、D3DImageの内容を更新します。そのあとで、メッセージの処理完了を示す handled を true にし、次の非同期サンプリング命令を呼び出します。&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; mso-layout-grid-align: none" class=MsoNormal align=left&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;SPAN style="COLOR: #2b91af"&gt;IntPtr&lt;/SPAN&gt; BltVideo( &lt;SPAN style="COLOR: #2b91af"&gt;IntPtr&lt;/SPAN&gt; hwnd, &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; msg, &lt;SPAN style="COLOR: #2b91af"&gt;IntPtr&lt;/SPAN&gt; wParam,&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;IntPtr&lt;/SPAN&gt; lParam, &lt;SPAN style="COLOR: blue"&gt;ref&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt; handled) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; (msg == WM_PAINT) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; { &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myD3DImage.Lock(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myD3DImage.AddDirtyRect( &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Int32Rect&lt;/SPAN&gt;(0, 0, videoWidth, videoHeight)); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myD3DImage.Unlock(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; handled = &lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myD3DScene.Sample();&lt;/STRONG&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; } &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; return&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;SPAN style="COLOR: #2b91af"&gt;IntPtr&lt;/SPAN&gt;.Zero; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;ソリューションを添付するので、WebCam のついた PC でビルド・実行してみてください。動作環境は以下の通りです。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows 7 (RC) &lt;/LI&gt;
&lt;LI&gt;Windows 7 SDK (RC) &lt;/LI&gt;
&lt;LI&gt;Visual Studio 2008 SP1 &lt;/LI&gt;
&lt;LI&gt;DirectX SDK (Mar 2009) &lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9821139" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/hiroyuk/attachment/9821139.ashx" length="33973" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Direct3D/default.aspx">Direct3D</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+Presentation+Foundation/default.aspx">Windows Presentation Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>Media Foundation ⑤ WebCam + WPF プロジェクトの作成とC++の実装</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/07/06/9818413.aspx</link><pubDate>Mon, 06 Jul 2009 04:14:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9818413</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9818413.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9818413</wfw:commentRss><description>&lt;p&gt;以前紹介したMedia Foundation の &lt;a href="http://blogs.msdn.com/hiroyuk/archive/2009/06/09/9712615.aspx"&gt;MFCaptureD3D サンプル&lt;/a&gt;を基に、WebCam のビデオ出力を D3DImage 経由で WPF で表示してみましょう。WPF で表示できれば、回転やスケールは思いのままですし、ブラーなどのエフェクトも容易です。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/MediaFoundationWebCamWPF1_E9C5/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/MediaFoundationWebCamWPF1_E9C5/image_thumb.png" width="244" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;WPFソリューションの作成と混合アセンブリに変換&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/hiroyuk/archive/2009/04/02/9528272.aspx"&gt;D3DImage チュートリアル&lt;/a&gt;を参考にして、WPFソリューションを作成し、MFCaptureD3Dプロジェクトを追加し、&lt;a href="http://blogs.msdn.com/hiroyuk/archive/2009/04/06/9533228.aspx"&gt;C++/CLIの混合アセンブリ&lt;/a&gt;に変換します。マニフェストは明示的に追加しなくても、自動生成のもので構いません。ついでに、&lt;a href="http://blogs.msdn.com/hiroyuk/archive/2009/04/13/9546623.aspx"&gt;WPFプロジェクトの設定&lt;/a&gt;もしておいてください。&lt;/p&gt;  &lt;h4&gt;C++コードの編集&lt;/h4&gt;  &lt;p&gt;まず、キャプチャしたビデオを表示するウィンドウを生成し、メッセージポンプを定義している winmain.cpp を「プロジェクトから除外」します。次にD3DWrapper.cppを追加します。D3DWrapper.cppの内容は以下の通りです。初期化するときにD3Dサーフェイスとビデオの幅と高さを取得して、呼び出し元（つまりC#側）に返します。あとは、SampleメソッドでのMFReaderの非同期サンプリングの命令と、クリーンアップだけです。非同期サンプリングなので、このSampleメソッドが返っても、サンプリングは終了していません。初期化時にMFStartupを、クリーンアップ時にMFShutdownを呼び出していることにも注意してください。&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; color: blue; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;#include&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: #a31515"&gt;&amp;quot;MFcaptureD3D.h&amp;quot;&lt;/span&gt;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;#include&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: #a31515"&gt;&amp;lt;vcclr.h&amp;gt;&lt;/span&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: blue"&gt;namespace&lt;/span&gt; System;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;CPreview* g_pPreview;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; color: blue; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;namespace&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt; MFCaptureViewer      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;{      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; D3DWrapper&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;{&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;:&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;IntPtr Initialize(IntPtr hwnd, &lt;span style="color: blue"&gt;int&lt;/span&gt;% width, &lt;span style="color: blue"&gt;int&lt;/span&gt;% height)&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LPDIRECT3DSURFACE9 g_pd3dSurface;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MFStartup(MF_VERSION);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if&lt;/span&gt; (SUCCEEDED(CPreview::CreateInstance((HWND)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; hwnd.ToPointer(),       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (HWND)hwnd.ToPointer(),&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp;g_pPreview)))       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: green"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Get Surface        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; g_pPreview-&amp;gt;m_draw.m_pSwapChain-&amp;gt;GetBackBuffer      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (0,D3DBACKBUFFER_TYPE_MONO, &amp;amp;g_pd3dSurface);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: green"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Video width &amp;amp; height        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; width = g_pPreview-&amp;gt;m_draw.m_width;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; height = g_pPreview-&amp;gt;m_draw.m_height;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return&lt;/span&gt; IntPtr(g_pd3dSurface);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; return&lt;/span&gt; IntPtr::Zero;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;} &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;VOID Sample()&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;g_pPreview-&amp;gt;m_pReader-&amp;gt;ReadSample(       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;(DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM,       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;0,&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;NULL, &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;NULL,&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;NULL,&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;NULL&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;VOID Cleanup()&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;g_pPreview-&amp;gt;Release();&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;MFShutdown();       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;}&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;};       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;} &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;device.h と device.cpp&lt;/h4&gt;  &lt;p&gt;device.cppでは主にD3D系の処理を行っています。まずバックバッファのD3DSrufaceとビデオの幅・高さを D3DWrapperで取得できるように、device.hで4つのプロパティをパブリックにします。&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; color: blue; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;:      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; UINT&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;m_width;&amp;#160; &lt;span style="color: green"&gt;// moved to public&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;UINT&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;m_height; &lt;span style="color: green"&gt;// moved to public&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;IDirect3DSwapChain9&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;*m_pSwapChain; &lt;span style="color: green"&gt;// moved to public&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;DrawDevice(); &lt;span style="color: green"&gt;// moved to public&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;virtual ~DrawDevice();&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;device.cpp では、マルチスレッドの解決、およびスワップチェーンのブリットは不要なので、次の2か所を変更します。&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = m_pD3D-&amp;gt;CreateDevice(       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;D3DADAPTER_DEFAULT,       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;D3DDEVTYPE_HAL,       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hwnd,       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;D3DCREATE_HARDWARE_VERTEXPROCESSING |&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; D3DCREATE_FPU_PRESERVE &lt;strong&gt;|        &lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;strong&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;D3DCREATE_MULTITHREADED&lt;/strong&gt;, &lt;font color="#008000"&gt;// Add &lt;/font&gt;&lt;span style="color: green"&gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;amp;pp,       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;amp;m_pDevice       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size: 9pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;…&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// Present the frame.        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// Removed        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// hr = m_pDevice-&amp;gt;Present(NULL, NULL, NULL, NULL);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h4&gt;preview.hと preview.cpp&lt;/h4&gt;  &lt;p&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;preview.cpp では主にMF関連の処理を行っています。まず、D3DWrapperで使えるように preview.h で2つのプロパティをパブリックにします。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; color: blue; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;:      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; IMFSourceReader&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;*m_pReader; &lt;span style="color: green"&gt;// moved to public&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;DrawDevice&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;m_draw;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// moved to public&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;preview.cpp では、以下の2つのメソッドを変更します。前者で追加しているのは winmain.cppで行われていたWebCamデバイスを取得するコードです。後者では、非同期のコールバック内で次のサンプリングを呼び出していたのを、WM_PAINT メッセージの送付に変更しています（必ずしもWM_PAINTでなければならないわけではありません）。WPFではこのメッセージを基にD3DImageへの書き込みを行います。灰色は変更しないコードです。&lt;/font&gt;&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;HRESULT CPreview::Initialize()        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;{        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;HRESULT hr = S_OK;         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = m_draw.CreateDevice(m_hwndVideo);&lt;/font&gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="color: green"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="color: green"&gt;// &lt;/span&gt;&lt;/span&gt;Add to get WebCam         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; IMFActivate **ppDevices;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; UINT32&lt;span style="mso-tab-count: 1"&gt;&amp;#160; &lt;/span&gt;count = 0;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; IMFAttributes *pAttributes=NULL;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; hr = MFCreateAttributes(&amp;amp;pAttributes,1);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; hr = pAttributes-&amp;gt;SetGUID(      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE,&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; hr = MFEnumDeviceSources(pAttributes, &amp;amp;ppDevices, &amp;amp;count);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; if&lt;/span&gt; (count &amp;gt;0)       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; hr = &lt;span style="color: blue"&gt;this&lt;/span&gt;-&amp;gt;SetDevice(ppDevices[0]);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="color: green"&gt;&amp;#160;&amp;#160;&amp;#160; // done        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;font color="#808080"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;return hr;         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;}&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;…&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;HRESULT CPreview::OnReadSample(        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;HRESULT hrStatus,         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;DWORD ,         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;DWORD ,         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;LONGLONG ,         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;IMFSample *pSample&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/font&gt;&lt;span style="color: green"&gt;&lt;font color="#808080"&gt;// Can be NULL          &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;)         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;{        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;HRESULT hr = S_OK;         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;IMFMediaBuffer *pBuffer = NULL;         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;EnterCriticalSection(&amp;amp;m_critsec);         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;if (FAILED(hrStatus))         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = hrStatus;         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;goto done;         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;if (pSample)         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font color="#808080"&gt;// Get the video frame buffer from the sample.          &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = pSample-&amp;gt;GetBufferByIndex(0, &amp;amp;pBuffer);         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;if (FAILED(hr)) { goto done; }         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font color="#808080"&gt;// Draw the frame.          &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = m_draw.DrawFrame(pBuffer);         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;if (FAILED(hr)) { goto done; }         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;/font&gt;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="color: green"&gt;&amp;#160;&amp;#160;&amp;#160; // Add        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;hr = SendMessage(m_hwndEvent, WM_PAINT, 0, 0);&lt;/strong&gt;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// Request the next frame.        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Removed         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// hr = m_pReader-&amp;gt;ReadSample(        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;(DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM,         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;0,         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NULL,&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;// actual         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NULL,&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;// flags         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NULL,&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;// timestamp         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NULL&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;// sample         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;);         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;done:        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;if (FAILED(hr))         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NotifyError(hr);         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;SafeRelease(&amp;amp;pBuffer);         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;LeaveCriticalSection(&amp;amp;m_critsec);         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="#808080"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;return hr;         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;}&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;ここで追加した SendMessage が非同期サンプリング時のC++とC#との同期問題を解決するカギの一つです。&lt;/p&gt;  &lt;p&gt;この時点で、ソリューション エクスプローラーでこのMFCaptureD3Dプロジェクトを右クリックして、[プロジェクトのみ]→[MFCaptureD3Dのみをリビルド]を実行して、エラーが出ないことを確認してください。&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt;つづく&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9818413" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Direct3D/default.aspx">Direct3D</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+Presentation+Foundation/default.aspx">Windows Presentation Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>並行ランタイムと並列パターン ライブラリのサンプル</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/06/29/9808117.aspx</link><pubDate>Mon, 29 Jun 2009 06:02:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9808117</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9808117.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9808117</wfw:commentRss><description>&lt;P&gt;以前、「&lt;A href="http://blogs.msdn.com/hiroyuk/archive/2009/05/22/9634797.aspx" mce_href="http://blogs.msdn.com/hiroyuk/archive/2009/05/22/9634797.aspx"&gt;並列プログラミング サンプル .NET 4 Beta 1&lt;/A&gt;」を紹介しましたが、ネイティブ Win32 のサンプルも「&lt;A href="http://code.msdn.microsoft.com/concrtextras" mce_href="http://code.msdn.microsoft.com/concrtextras"&gt;並行ランタイムと並列パターン ライブラリ（PPL）のコードサンプル&lt;/A&gt;」として公開されています。「&lt;A href="http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0" mce_href="http://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A3%E3%83%9C%E3%83%8A%E3%83%83%E3%83%81%E6%95%B0"&gt;フィボナッチ数&lt;/A&gt;」を求めたり、「&lt;A href="http://ja.wikipedia.org/wiki/%E9%A3%9F%E4%BA%8B%E3%81%99%E3%82%8B%E5%93%B2%E5%AD%A6%E8%80%85%E3%81%AE%E5%95%8F%E9%A1%8C" mce_href="http://ja.wikipedia.org/wiki/%E9%A3%9F%E4%BA%8B%E3%81%99%E3%82%8B%E5%93%B2%E5%AD%A6%E8%80%85%E3%81%AE%E5%95%8F%E9%A1%8C"&gt;食事をする哲学者&lt;/A&gt;」などのサンプルがあります。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9808117" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Parallel/default.aspx">Parallel</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>H.264 / AVC デコード DXVAの仕様書の更新</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/06/29/9808088.aspx</link><pubDate>Mon, 29 Jun 2009 05:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9808088</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9808088.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9808088</wfw:commentRss><description>&lt;P&gt;DXVAはビデオなどのメディアをGPUでハードウェア デコードするための Win32 API です。ダウンロードセンターに以前からあった&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=3d1c290b-310b-4ea2-bf76-714063a6d7a6#filelist" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=3d1c290b-310b-4ea2-bf76-714063a6d7a6#filelist"&gt;H.264 ハードウェア デコードの仕様書&lt;/A&gt;が少しだけ更新されました（バグフィックス）。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9808088" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Direct3D/default.aspx">Direct3D</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>Media Foundation ④ WebCam + WPF 同期か非同期か</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/06/25/9802935.aspx</link><pubDate>Thu, 25 Jun 2009 07:57:30 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9802935</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9802935.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9802935</wfw:commentRss><description>&lt;p&gt;Windows 7 SDk (RC) にある Media Foundation のサンプル &lt;a href="http://blogs.msdn.com/hiroyuk/archive/2009/06/09/9712615.aspx"&gt;MFCaptureD3D&lt;/a&gt; を使って WPF で WebCam のビデオを表示してみましょう。D3DSurface → D3DImage → WPF という流れは、以前 &lt;a href="http://blogs.msdn.com/hiroyuk/archive/2009/03/30/9517928.aspx"&gt;D3DImage チュートリアル&lt;/a&gt;で紹介したとおりですが、WebCam の画像をWPFで表示するときには、同期サンプリングか非同期サンプリングかのどちらの戦略をとるかを選ばなければなりません。&lt;/p&gt;  &lt;h4&gt;非同期サンプリング&lt;/h4&gt;  &lt;p&gt;MFCaptureD3D では元々サンプリングを非同期で行っています。アトリビュート ストアでMF_SOURCE_READER_ASYNC_CALLBACKを指定し、非同期コールバックを設定しています。&lt;/p&gt;  &lt;p&gt;&lt;font color="#008000"&gt;// ③非同期コールバックを設定&lt;/font&gt;    &lt;br /&gt;&lt;font face="Consolas"&gt;hr = pAttributes-&amp;gt;SetUnknown(      &lt;br /&gt;&amp;#160; MF_SOURCE_READER_ASYNC_CALLBACK,       &lt;br /&gt;&amp;#160; this       &lt;br /&gt;&amp;#160; );&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;サンプリングを待つ時間を他のUIスレッドで使えるので、WPFのようなアプリには非同期が理想的です。&lt;/p&gt;  &lt;p&gt;このサンプルコードでは 非同期コールバックの場所として this が指定されているので、サンプリングが完了すると自クラスの OnReadSample メソッドが呼び出されます。このメソッドで、サンプリングした画像をD3DSurfaceに書き込んでから、C++ から C# に何らかのメッセージを送ってD3DSurfaceにビデオ画像が書き込まれたことを通知する仕組みが必要です。&lt;/p&gt;  &lt;h4&gt;同期サンプリング&lt;/h4&gt;  &lt;p&gt;以前の D3DImage チュートリアルでは、C# 側から Render メソッドで C++ の Direct3D レンダリングを実行し、それが戻ったら、ロックして AddDirtyRect メソッドでブリットしていました。同期サンプリングの戦略であれば、WebCam から画像を取得し D3DSrufaceへの書き込みを待ってブリットするという、同じ手順でレンダリングできます。&lt;/p&gt;  &lt;p&gt;しかし、WebCam デバイスのサンプリングには待ち時間が発生します。しかも1秒間に30フレーム程度確保しようとすると、待ち時間は全体のかなりの割合を占める可能性があります。その間 UI を操作できず、パフォーマンスが悪化する可能性があります。&lt;/p&gt;  &lt;p&gt;同期サンプリングを実装するには、アトリビュートストアに前述の非同期指定（MF_SOURCE_READER_ASYNC_CALLBACK）を入れずに、ソースリーダーを取得して、次のようにReadSampleを呼び出すだけです。同期サンプリングでは ReadSample が帰ったときにサンプル画像が取得できます（実装では取得できるまでサンプリングを繰り返します）。&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;DWORD dwStream;     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;DWORD dwFlags;     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;IMFSample* pSample = NULL;     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;LONGLONG llTimeStamp;     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="color: blue"&gt;while&lt;/span&gt;( !pSample )      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160; {     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; hr = m_pReader-&amp;gt;ReadSample(     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM,     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0,     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;#160;&amp;#160; &amp;amp;dwStream,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;amp;dwFlags,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;amp;llTimeStamp,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-tab-count: 3"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;#160;&amp;#160; &amp;amp;pSample      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-tab-count: 1"&gt;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;/span&gt;&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt;     &lt;p&gt;結論として、今回のサンプルコードでは、&lt;strong&gt;非同期サンプリングの戦略&lt;/strong&gt;で実装することにしました。両方とも実装してテストしてみましたが、やはり同期サンプリングでは UI 操作の引っ掛かりが発生することと、C++ コードの修正が多くなるためです。&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9802935" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Direct3D/default.aspx">Direct3D</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+Presentation+Foundation/default.aspx">Windows Presentation Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>TechEd 2009 オープンステージ</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/06/23/9798682.aspx</link><pubDate>Tue, 23 Jun 2009 05:37:33 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9798682</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9798682.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9798682</wfw:commentRss><description>&lt;p&gt;8月26日-28日に開催される&lt;a href="http://www.microsoft.com/japan/teched/2009/"&gt;TechEd 2009&lt;/a&gt; では、&lt;a href="http://www.microsoft.com/japan/teched/2009/connect/openstage.mspx"&gt;オープンステージ&lt;/a&gt;で「&lt;strong&gt;Media Foundation (Win32) の新機能 @ Windows 7&lt;/strong&gt;」を話します。短い時間ですが、このブログでも紹介した、ビデオキャプチャやMFPlayの話をしようと思います。&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9798682" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>Windows API Code Pack for Microsoft .NET Framework (v0.9)</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/06/15/9752025.aspx</link><pubDate>Mon, 15 Jun 2009 07:12:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9752025</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9752025.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9752025</wfw:commentRss><description>&lt;P&gt;Windows API Code Pack が v0.9 に更新されました。内容は以下の通りで、緑色がv0.85からの追加部分です。バグフィックスとともに、VBを含む新しいサンプルも追加されています。&lt;/P&gt;
&lt;P&gt;Direct3D 10/10.1 も追加されました！ &lt;STRONG&gt;D3DX10&lt;/STRONG&gt;も含まれ、チュートリアルを含むサンプルもたくさん用意されているのでかなり役に立ちそうです。チュートリアルにはWinForm用、WinFormコントロール用、WPF用が用意されています。&lt;/P&gt;
&lt;P&gt;しかしマルチタッチは含まれていません。.NET のマルチタッチについては、.NET Framework 4を待つしかないかもしれません。マルチタッチは Visual Studio 2010 Beta1 にもまだ含まれていませんでした。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows 7 タスクバー ジャンプリスト、アイコン オーバーレイ、プログレスバー、&lt;FONT color=#008000&gt;タブ サムネイル、サムネイル ツールバー&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;既知のフォルダー、Windows 7 ライブラリ、非ファイルシステム コンテナ、シェル名前空間エンティティの階層 &lt;/LI&gt;
&lt;LI&gt;Windows 7 エクスプローラー ブラウザー コントロール &lt;/LI&gt;
&lt;LI&gt;シェル プロパティ システム &lt;/LI&gt;
&lt;LI&gt;Windows Vista と Windows 7 コモン ファイル ダイアログ（カスタム ファイル ダイアログを含む） &lt;/LI&gt;
&lt;LI&gt;Windows Vista と Windows 7 のタスクダイアログ &lt;/LI&gt;
&lt;LI&gt;Direct3D 11.0、&lt;FONT color=#008000&gt;Direct3D 10.0/10.1&lt;/FONT&gt;、DXGI 1.0/1.1、&lt;FONT color=#008000&gt;Direct2D 1.0、DirectWrite、Windows Imaging Component (WIC) API&lt;/FONT&gt;（DirectWriteとWICは部分的なサポート） &lt;/LI&gt;
&lt;LI&gt;センサー プラットフォーム API &lt;/LI&gt;
&lt;LI&gt;拡張言語サービス API &lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#008000&gt;電源管理 API&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#008000&gt;アプリケーション再起動・リカバリー API&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#008000&gt;ネットワーク リスト マネージャ API&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#008000&gt;コマンドリンク コントロールとシステム定義シェル アイコン&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;ビルドには以下の環境が必要です。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;.NET Framework 3.5 以上、&lt;/LI&gt;
&lt;LI&gt;Windows SDK for Windows 7 RC&lt;/LI&gt;
&lt;LI&gt;DirectX SDK (March 2009)&lt;/LI&gt;&lt;/UL&gt;
&lt;H5&gt;D3D10チュートリアル ビルド時の注意&lt;/H5&gt;
&lt;P&gt;Direct3Dでビルドするときには、DirectX SDKのインクルード フォルダとライブラリ フォルダを[ツール]→[オプション]から[プロジェクトおよびソリューション]→[VC++ディレクトリ]で追加する必要があります。&lt;/P&gt;
&lt;P&gt;しかし、D3D10のサンプルをビルドしようとしたとき、なぜか「D3DX10.hが見つからない」というビルドエラーで失敗しました。Direct3DX10プロジェクトを右クリックして[プロパティ]を選び、[構成プロパティ]→[C/C++]→[全般]で、[追加のインクルード ディレクトリ]にDirectX SDKのインクルードフォルダ（C:\Program Files\Microsoft DirectX SDK (March 2009)\Include）を指定します。さらに[構成プロパティ]→[リンカ]で[追加のライブラリ ディレクトリ]にDirectX SDKライブラリフォルダ（C:\Program Files\Microsoft DirectX SDK (March 2009)\Lib\x86）を追加します。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/WindowsAPICodePackforMicrosoft.NETFram.9_B9CB/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/WindowsAPICodePackforMicrosoft.NETFram.9_B9CB/image_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/WindowsAPICodePackforMicrosoft.NETFram.9_B9CB/image_thumb.png" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/WindowsAPICodePackforMicrosoft.NETFram.9_B9CB/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;D3DTutorial09_WPFの結果。ライティングが指定されていないので暗い。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9752025" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Direct3D/default.aspx">Direct3D</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item></channel></rss>