2014-05-12 22 views
18

Vâng, câu hỏi của tôi rất đơn giản:
Làm cách nào để chụp ảnh bằng Windows Store App cho Windows Phone 8.1, sử dụng máy ảnh?
Các mẫu trên MSDN sử dụng Windows.Media.Capture.CameraCaptureUI, không thể sử dụng được trên Windows Phone hoặc dành cho Silverlight.
Tôi không thể tìm thấy bất kỳ tài liệu hoặc mẫu cụ thể nào cho ứng dụng Windows Phone bằng Windows Runtime.
Nếu ai đó biết, hoặc thậm chí có tài liệu cho điều này, tôi sẽ rất vui.Chụp ảnh trên Windows Store App cho Windows Phone

+2

Bạn có muốn ứng dụng Cửa hàng Windows hoặc ứng dụng Windows Phone không? –

+0

Ứng dụng Cửa hàng Windows. Nhưng đối với Windows Phone. (Ứng dụng Windows Phone sử dụng Windows Runtime). – GlorfSf

Trả lời

48

Trong WP8.1 Runtime (cũng trong Silverlight), bạn có thể sử dụng MediaCapture. Nói tóm lại:

// First you will need to initialize MediaCapture 
Windows.Media.Capture.MediaCapture takePhotoManager = new Windows.Media.Capture.MediaCapture(); 
await takePhotoManager.InitializeAsync(); 

Nếu bạn cần một bản xem trước, bạn có thể sử dụng một CaptureElement:

// In XAML: 
<CaptureElement x:Name="PhotoPreview"/> 

Sau đó, trong đoạn code phía sau bạn có thể bắt đầu/ngừng xem trước như thế này:

// start previewing 
PhotoPreview.Source = takePhotoManager; 
await takePhotoManager.StartPreviewAsync(); 
// to stop it 
await takePhotoManager.StopPreviewAsync(); 

Cuối cùng để chụp một bức ảnh, bạn có thể lấy ví dụ trực tiếp đến một tệp CapturePhotoToStorageFileAsync hoặc tới một dòng 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); 

Nếu bạn muốn quay video sau đó here is more information.

Cũng đừng quên thêm Webcam vào Capabilities tệp kê khai của bạn và Front/Rear Camera trong Requirements.


Trong trường hợp bạn cần phải chọn một máy ảnh (fornt/sau), bạn sẽ cần phải nhận được Id Camera và sau đó khởi MediaCapture với các thiết lập mong muốn:

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      
     }); 
} 
+0

Đó là những gì tôi đang tìm kiếm, vâng. Cảm ơn rất nhiều, bạn đã cứu tôi. – GlorfSf

+0

@ user3627550 Tôi đã thêm lựa chọn thiết bị camera (trước/sau). – Romasz

+0

Tôi đã thực hiện mọi thứ như bạn có nhưng khi tôi muốn chụp ảnh, bản xem trước bị lật 180 độ nhưng trông ổn khi tôi giữ điện thoại ở chế độ ngang. làm thế nào để khắc phục các ý tưởng đó? –

0

Bạn có thể thực hiện phương pháp trên liên kết this. Mọi thứ được giải thích rất độc đáo.

Chỉ cần sử dụng lớp PhotoCamera và đừng quên để cho phép sử dụng camera trong ứng dụng của bạn manifest

+0

Vâng, cảm ơn bạn, nhưng vấn đề là tôi cần phải hoàn thành một ứng dụng cửa sổ cửa hàng. Các cửa sổ 8.1 ứng dụng sử dụng thời gian chạy Windows và API này rất khác với các ứng dụng Silverlight. Và, tất nhiên, API hoàn chỉnh không được triển khai cho điện thoại windows: một số lớp rất hữu ích và đơn giản mà bạn có thể sử dụng cho Windows 8.1 sẽ không thể sử dụng được cho windows phone và tôi không thể tìm thấy các giải pháp khác. – GlorfSf

3

Trong phổ Windows Phone 8.1 (WinRT) ứng dụng nó không còn có thể nhảy trực tiếp vào ứng dụng camera tích hợp và nhận được một cuộc gọi lại khi một bức ảnh được chụp.

Để làm điều đó, bạn phải triển khai Windows.Media.Capture.MediaCapture như được mô tả ở trên. Có sử dụng là CameraCatureUI nhưng nó không có sẵn trong các ứng dụng WinRT cho Windows Phone 8.1.

Tuy nhiên, có một "cách giải quyết". Bạn có thể sử dụng Windows.Storage.Pickers.FileOpenPicker và định cấu hình để chọn hình ảnh. Bây giờ, bộ chọn sẽ có nút máy ảnh. Người dùng có thể nhấp vào nút camera và ứng dụng máy ảnh tích hợp sẽ mở ra. Sau khi người dùng chụp ảnh, bạn sẽ nhận được cuộc gọi lại trong ứng dụng của mình. Gọi lại FileOpenPicker hơi khó chịu khi triển khai, nhưng nó hoạt động. Nếu bạn có thể sống với ý nghĩa khả năng sử dụng thì đây có thể là một cách tiếp cận hợp lệ.

Đã có một phiên về chủ đề này trong khi xây dựng-Hội nghị trong năm 2014.You can watch the session online with this link.

+0

đây là trường hợp chỉ với điện thoại, những gì về ứng dụng cửa hàng điện thoại? – Yawar

Các vấn đề liên quan