2016-07-11 21 views
1

の写真を撮るのは簡単なことですが、私の車輪は回転しています。Windows 10、WinRT

私はSurface Pro 4、Windows 10を使用し、Visual Studio 2013 Professionalを使用しています。
C#4.5を使用してWPFを開発する。

要約すると、私は制御できない他のサードパーティライブラリに頼らずに簡単なカメラキャプチャを行い画像を保存しようとしています。この記事の残りの部分は、私が調べてみた他の研究結果の詳細であり、失敗したものとコンパイラからのそのようなメッセージです。

もう一度、単純なカメラ、キャプチャ画像、ディスクに保存するが、すべてのasync-awaitオプションはコンパイラエラーを投げるように見える。

EDIT 1サンプルコード

ここWPFフォームのコードです。私はコンパイルするために「待つ」ことさえできないので、フォームには何のコントロールもありません。

using System; 
using Windows.Media.Capture; 
using System.Windows; 

namespace CameraCapture 
{ 
    public partial class MainWindow : Window 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 
      JustDoIt(); 
     } 

     private MediaCapture _mediaManager; 
     private async void JustDoIt() 
     { 
      //initialize mediacapture with default camera 
      _mediaManager = new MediaCapture(); 
      await _mediaManager.InitializeAsync(); 

      if (_mediaManager == null) 
       MessageBox.Show("Failed Initialize"); 

      await _mediaManager.StartPreviewAsync(); 
     } 
    } 
} 

そして、私のプロジェクトはまた、以下から研究その他のリンクごとに「待つ」

Error 1 'await' requires that the type 'Windows.Foundation.IAsyncAction' have a suitable GetAwaiter method. Are you missing a using directive for 'System'? 

と私は「使用しているのそれぞれについて、

System.Runtime.dll and 
System.Runtime.WindowsRuntime.dll 

コンパイルエラーのDLLを持っていますシステム;"最初の行として。 WinRTとデフォルトのシステムインクルードを使用しているときに、他の「待っている」ことがありますか? EDIT

OF

END私はその後、私が説明したようすべてのステップを通過しようとした のアプリどのようにデスクトップから特定のWinRTのAPIを使用するには、このリンクhttps://www.eternalcoding.com/?p=183 を見つけhttps://msdn.microsoft.com/en-us/library/windows/apps/windows.media.capture.cameracaptureui.aspx CameraCaptureUIクラス

で開始

await ...が適切なGetAwaiterメソッドを持っています。

だから、私は非同期について見上げると待って、どのように、いつasyncawaitを使用する

How and When to use `async` and `await` に出くわしました。

私は最初のカメラキャプチャプロジェクトを廃止し、新しいものを開始し、そのバージョン には単純なthread.sleepの遅延があり、asynch/awaitのコンセプトを示すようにしました。その部分は機能する。

はだから今、私は、プロジェクトへの参照を再度追加し、手動で参照は最初のリンクごとのWindows /コアを露出させ、その後、Windows.Mediaへのアクセスを取得公開する

<PropertyGroup> 
    <TargetPlatformVersion>8.0</TargetPlatformVersion> 
    </PropertyGroup> 

を追加するために編集します、Windows.Storage。私はCameraCaptureUIとCaptureFileAsyncについての最初のちょっとしたコードをちょうどスタートポイントとして追加しています...

private async void Camera1() 
{ 
    var cameraUi = new Windows.Media.Capture.CameraCaptureUI(); 
    var capturedMedia = await cameraUi.CaptureFileAsync(Windows.Media.Capture.CameraCaptureUIMode.Video); 

    if (capturedMedia == null) 
     return; 

    MessageBox.Show("Valid Camera"); 
} 

約コンパイルエラーを取得:

は '待つ' はタイプ 'Windows.Foundation.IAsyncOperation' は、適切なGetAwaiterメソッドを持っていることが必要です。 'System'のusingディレクティブがありませんか?

また、元のWindowsのバージョンの試みに

private async void Camera2() 
{ 
    CameraCaptureUI dialog = new CameraCaptureUI(); 
    Windows.Foundation.Size aspectRatio = new Windows.Foundation.Size(16, 9); 
    dialog.PhotoSettings.CroppedAspectRatio = aspectRatio; 

    StorageFile file = await dialog.CaptureFileAsync(CameraCaptureUIMode.Photo); 
    if (file == null) 
     return; 

    MessageBox.Show("Valid Storage File Captured"); 
} 

を経由して私もプロジェクトへの参照としてSystem.RuntimeとSystem.RunTime.WindowsRuntimeを持っているが、まだコンパイルに失敗します。

私は何が欠けていますか?私は、Windows 8.1やWindows 10などのさまざまなバージョン間で機能が変化し、機能やライブラリにアップグレードされたことを知っていますが、なぜなら一方的にしか動作しません。私が行ったように頭を悩ま人のために

+0

背景情報が多すぎるかどうかわかりません –

答えて

0

、私は最終的に不足しているリンクを持っていた別のポストに出くわした...

How can i import windows.media.capture in my WPF project?

差が

<TargetPlatformVersion>8.1</TargetPlatformVersion> 

の代わりに、8.0でした。

8.1では、Foundation、Mediaなどの個別の.dll参照の多くが表示されましたが、単一の「Windows」dllは表示されませんでした。

一度8.1に変更してWINDOWS DLLを認識すると、すべてメディアマネージャまたはCameraCaptureUIオプションに関して機能します。

関連する問題