さて、私の質問は簡単です:
カメラを使用して、Windows Store App
のWindows Phone 8.1
で写真をキャプチャするにはどうすればよいですか?
MSDNのサンプルはWindows.Media.Capture.CameraCaptureUI
を使用していますが、これはWindows Phoneでは使用できないか、Silverlight
用です。
Windowsランタイムを使用するWindowsPhoneアプリ専用のドキュメントまたはサンプルが見つかりません。
誰かがこれを知っているか、あるいはこのためのドキュメントさえ持っていれば、私はうれしいです。
WP8.1ランタイム(Silverlightでも)では、 MediaCapture を使用できます。要するに:
// First you will need to initialize MediaCapture
Windows.Media.Capture.MediaCapture takePhotoManager = new Windows.Media.Capture.MediaCapture();
await takePhotoManager.InitializeAsync();
プレビューが必要な場合は、 CaptureElement を使用できます。
// In XAML:
<CaptureElement x:Name="PhotoPreview"/>
次に、背後のコードで、次のようにプレビューを開始/停止できます。
// start previewing
PhotoPreview.Source = takePhotoManager;
await takePhotoManager.StartPreviewAsync();
// to stop it
await takePhotoManager.StopPreviewAsync();
最後に、写真を撮るには、たとえば、ファイルに直接撮る CapturePhotoToStorageFileAsync またはストリームに CapturePhotoToStreamAsync :
ImageEncodingProperties imgFormat = ImageEncodingProperties.CreateJpeg();
// a file to save a photo
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(
"Photo.jpg", CreationCollisionOption.ReplaceExisting);
await takePhotoManager.CapturePhotoToStorageFileAsync(imgFormat, file);
ビデオをキャプチャしたい場合は 詳細はこちら 。
また、マニフェストファイルのWebcam
にCapabilities
を追加し、Requirements
にFront/Rear Camera
を追加することを忘れないでください。
カメラ(フォント/バック)を選択する必要がある場合は、カメラIDを取得してから、必要な設定でMediaCapture
を初期化する必要があります。
private static async Task<DeviceInformation> GetCameraID(Windows.Devices.Enumeration.Panel desired)
{
DeviceInformation deviceID = (await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture))
.FirstOrDefault(x => x.EnclosureLocation != null && x.EnclosureLocation.Panel == desired);
if (deviceID != null) return deviceID;
else throw new Exception(string.Format("Camera of type {0} doesn't exist.", desired));
}
async private void InitCamera_Click(object sender, RoutedEventArgs e)
{
var cameraID = await GetCameraID(Windows.Devices.Enumeration.Panel.Back);
captureManager = new MediaCapture();
await captureManager.InitializeAsync(new MediaCaptureInitializationSettings
{
StreamingCaptureMode = StreamingCaptureMode.Video,
PhotoCaptureSource = PhotoCaptureSource.Photo,
AudioDeviceId = string.Empty,
VideoDeviceId = cameraID.Id
});
}
ユニバーサルWindowsPhone 8.1(WinRT)アプリでは、組み込みのカメラアプリに直接ジャンプして、写真の撮影時にコールバックを受信することはできなくなりました。
これを行うには、上記のようにWindows.Media.Capture.MediaCapture
を実装する必要があります。以前はCameraCatureUI
がありましたが、Windows Phone8.1のWinRTアプリでは使用できません。
ただし、「回避策」があります。Windows.Storage.Pickers.FileOpenPicker
を使用して、画像を選択するように構成できます。これで、ピッカーにカメラボタンが表示されます。ユーザーがカメラボタンをクリックすると、内蔵のカメラアプリが開きます。ユーザーが写真を撮ると、アプリにコールバックが届きます。 FileOpenPicker
コールバックは実装するのが少し面倒ですが、機能します。ユーザビリティへの影響に耐えられるのであれば、これは有効なアプローチかもしれません。
2014年のMicrosoftのビルド会議中にこのトピックに関するセッションがありました。 このリンクからオンラインでセッションを見ることができます。
this linkでアプローチできます。すべてが非常にうまく説明されています。
PhotoCamera
クラスを使用するだけで、アプリマニフェストでカメラの使用を有効にすることを忘れないでください