2

Windows 8 Metro アプリの開発に JavaScript を使用しています。ただし、C# も問題外ではありません。Web カメラが写真のキャプチャでサポートできる最高の解像度を指定する方法を見つけようとしています。これまでのところ、私はMediaCaptureクラスを使用しているので、プレビューを表示して画像をキャプチャできます。CaptureUI がMaxPhotoResolutionのオプションをサポートしていることに気付きました。ただし、これを自動化し、ユーザーの操作を必要としないようにしたいと考えています。私はアイデアが不足しています。これはキオスク アプリケーション用であるため、デバイスを完全に制御できるため、回避策を歓迎します。アイデアや提案はありますか?

テストのために、LifeCam Studio を使用しています。カメラ アプリは 1920x1080 を取得し、アプリケーションは 640x480 で写真をキャプチャします。また、ドライバーに付属のソフトウェアは問題なく動作します。これは私の手に負えませんか?

アップデート

特定のカメラ設定の設定を調べています。これがポップアップしました。しかし、これまでのところ、私はそれで運がありませんでした...

9 月 18 日の更新

私は掘り下げてきて、これを思いつきまし。解決プロパティが返されます。ただし、setMediaStreamPropertiesAsync メソッドは効果がありません。私はアイデアが不足しています。

12 月 13 日の更新

これを最後にもう一度試してみることにしました。18 日に説明した方法のいくつかを使用すると、公式の Windows 8 リリースで、Lifecam Studio を使用して JavaScript を介して動作しました。理由はわかりません。使用したコードは次のとおりです。

//media=MediaCapture object
function setBestResolution(media) {
    //Gets collection of objects each describing the resolution, etc.
    var resolutions = media.videoDeviceController.getAvailableMediaStreamProperties(Windows.Media.Capture.MediaStreamType.photo);
    var numResolutions=resolutions.length;

    for (var r = 0; r<resolutions;r++){
        var res = resolutions[r];
        //.width and .height are props. Debug to see all.
    }

    //I chose 40 as best option; however, programmatically you can choose any. I have dedicated kiosk app and same webcam and therefore don't need to.
    media.videoDeviceController.setMediaStreamPropertiesAsync(Windows.Media.Capture.MediaStreamType.photo, resolutions[40]);
}
4

1 に答える 1

0

あなたが何をしようとしているのか、私には少しわかりません。問題は、特定の写真解像度でキャプチャすることですか、それとも特定のアスペクト比でキャプチャすることですか?

CameraCaptureUI を使用する場合、PhotoSettings プロパティを使用して、キャプチャした写真の基準を設定できます。

http://msdn.microsoft.com/en-us/library/windows/apps/windows.media.capture.cameracaptureui.photosettings.aspx

たとえば、画像が常に 4:3 または 16:9 になるようにCroppedAspectRatioを設定できます。MaxResolutionプロパティを設定して、キャプチャ時の写真のピクセル寸法を制限することもできます。

MediaCaptureクラスは、システム ダイアログを使用する代わりに、アプリケーションの一部としてカスタム キャプチャ エクスペリエンスが必要な場合にのみ必要ですMediCapture のデフォルトの初期化では、デバイスが最高の解像度で初期化されます (テストはしていませんが、そう思います)。MediaCapture でキャプチャする解像度をオーバーライドすることは可能ですが、デバイスでサポートされている解像度に制限されます。デバイスでサポートされている解像度を列挙できます。リンク先のフォーラム投稿では、次の方法が示されています。

http://social.msdn.microsoft.com/Forums/en-SG/winappswithcsharp/thread/751b8d83-e646-4ce9-b019-f3c8599e18e0

もちろん、お使いのデバイスでサポートされている解像度が、実際に維持したい解像度やアスペクト比ではない場合があります。したがって、写真をトリミングする機能をユーザーに提供しなければならなくなり、さらに画像のサイズを変更しなければならなくなる可能性があります。これには、構築する必要がある追加のコードと追加の UI 要素が必要になります。ユーザーがトリミングできるようにするコードがあり、イメージを必要な正確な解像度にサイズ変更 (またはダウンサンプリング) するコードがある場合、MediaCapture デバイスが初期化する解像度を実際に変更する必要はありません。

1 つの戦略は、ApplicationData.Current.TemporaryFolderに一時ファイルを作成し、その一時ファイルでMediaCapture.CapturePhotoToStreamAsyncを呼び出すことです。次に、そのファイルを独自の UI に表示してトリミングを許可し、最終的に必要な解像度にサイズ変更してから、最終的な画像を実際のターゲット フォルダーに保存します。

ユーザーが保持したい画像の領域を選択できるようにするために独自の UI を作成する必要がありますが、CodePlex の WriteableBitmapEx プロジェクトは、実際のトリミングとサイズ変更を行うのに非常に役立つことがおそらく証明されます。

http://writeablebitmapex.codeplex.com/

于 2012-09-18T21:04:36.760 に答える