5

私はウェブカメラを使ってC#で写真を撮ろうとしています

以前は、いくつかのライブラリを使用してそのようにしました。

デフォルトのwin 8(ちなみに、私のオペレーティングシステムはwin 8です)を使用すると、カメラアプリケーションの最大写真品質が8px(3264 x 2468)であるという問題に直面しました。しかし、上記のライブラリを使用して、利用可能なスナップショットの品質をプログラムで検索しましたが、最大サイズは 2px 未満でした。Win 8のデフォルトのカメラアプリがどのように大きな違いを生むのか、私にはわかりません。したがって、デフォルトの Windows 8 カメラ アプリケーションを使用することにしました。

問題解決策をグーグルで検索しましたが、C#からwin 8カメラアプリをプログラムで実行する方法についてのアイデアを見つけることができませんでした. (携帯電話がカメラ アプリケーションを開くのと同じように、写真を撮り、カメラ アプリケーションを閉じ、その場所からアプリケーション ディレクトリに写真をコピーします) 誰か助けてくれませんか?

4

2 に答える 2

6

とてもシンプルです。以下の手順に従ってください。

protected async override void OnNavigatedTo(NavigationEventArgs e)
    {
        var ui = new CameraCaptureUI();
        ui.PhotoSettings.CroppedAspectRatio = new Size(4, 3);
        var file = await ui.CaptureFileAsync(CameraCaptureUIMode.Photo);

        if (file != null)
        {
            var bitmap = new BitmapImage();
            bitmap.SetSource(await file.OpenAsync(FileAccessMode.Read));
            Photo.Source = bitmap;
        }
    }

以下のヘッダーファイルを使用し、

using Windows.Media.Capture;
using Windows.UI.Xaml.Media.Imaging; // for BitmapImage
using Windows.Storage; // for FileAccessMode

このように、グリッド内に写真を追加します

<Grid Background="{StaticResource ApplicationPageBackgroundBrush}">
 <Image x:Name="Photo" Width="700" Height="700" />
</Grid>

最後に、package.manifest にある Capabilities で WebCam を許可します。これで完了です。

于 2014-07-16T15:02:44.930 に答える
3

いくつかのプロパティをデフォルト ダイアログに設定しようとしましたか?

public static async Task CapturePhoto()
        {
            CameraCaptureUI dialog = new CameraCaptureUI();
            Size aspectRatio = new Size(16, 9);  // 1
            dialog.PhotoSettings.CroppedAspectRatio = aspectRatio; // 2
            dialog.PhotoSettings.MaxResolution = CameraCaptureUIMaxPhotoResolution.HighestAvailable; // 3
            dialog.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Jpeg; // 4
            dialog.PhotoSettings.AllowCropping = true; //5

            StorageFile file = await dialog.CaptureFileAsync(CameraCaptureUIMode.Photo); // Your new file
        }

私のWindows Store App中ではうまくいきます。

于 2014-07-14T12:17:28.347 に答える