Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive come usare la classe CameraCaptureUI per acquisire foto o video usando l'interfaccia utente della fotocamera integrata in Windows. Questa funzionalità consente all'app di ottenere una foto o un video acquisito dall'utente con poche righe di codice.
Se vuoi fornire un'interfaccia utente della fotocamera personalizzata o se lo scenario richiede un controllo più affidabile e di basso livello dell'operazione di acquisizione, devi usare la classe MediaCapture e implementare la tua esperienza di acquisizione. Per ulteriori informazioni, vedere acquisizione di foto, video e audio di base con MediaCapture.
Usare la classe CameraCaptureUI per acquisire foto
Creare una nuova istanza di CameraCaptureUI passando la proprietà AppWindow.Id della finestra dell'app. La proprietà PhotoSettings consente di specificare alcuni vincoli sulla foto acquisita, tra cui il formato del file e la risoluzione massima e se l'interfaccia utente consente all'utente di ritagliare la foto dopo l'acquisizione. La proprietà VideoSettings fornisce proprietà simili per l'acquisizione video, ad esempio la risoluzione massima e la durata e se l'interfaccia utente consente all'utente di tagliare il video dopo l'acquisizione.
Chiama CaptureFileAsync per avviare l'interfaccia utente di acquisizione della fotocamera in modo asincrono. Usa uno dei valori di CameraCaptureUIMode per specificare se l'interfaccia utente deve consentire l'acquisizione di foto, l'acquisizione di video o entrambi. Al termine di CaptureFileAsync , restituirà un oggetto file StorageFile contenente la foto o il video acquisito. Se l'oggetto restituito è Null, significa che l'utente ha annullato l'operazione di acquisizione o si è verificato un errore.
L'esempio seguente illustra l'avvio di CameraCaptureUI per l'acquisizione di foto, specificando il formato immagine come PNG e disabilitando il ritaglio. In questo esempio la foto acquisita viene impostata come origine per un controllo Immagine .
var cameraCaptureUI = new CameraCaptureUI(this.AppWindow.Id);
cameraCaptureUI.PhotoSettings.Format = CameraCaptureUIPhotoFormat.Png;
cameraCaptureUI.PhotoSettings.AllowCropping = false;
// Capture a photo asynchronously
StorageFile photo = await cameraCaptureUI.CaptureFileAsync(CameraCaptureUIMode.Photo);
if (photo != null)
{
// Photo capture was successful
// Show the captured photo in a XAML Image control
using (IRandomAccessStream fileStream = await photo.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
// Set the image source to the selected bitmap
BitmapImage bitmapImage = new BitmapImage();
await bitmapImage.SetSourceAsync(fileStream);
iCapturedImage.Source = bitmapImage;
}
} else
{
// Photo capture failed or was cancelled
}
Usare la classe CameraCaptureUI per acquisire video
L'esempio seguente illustra l'avvio di CameraCaptureUI per l'acquisizione video, specificando il video massimo come definizione standard e disabilitando il taglio. In questo esempio la foto acquisita viene impostata come origine per un controllo MediaPlayerElement .
var cameraCaptureUI = new CameraCaptureUI(this.AppWindow.Id);
cameraCaptureUI.VideoSettings.MaxResolution = CameraCaptureUIMaxVideoResolution.StandardDefinition;
cameraCaptureUI.VideoSettings.AllowTrimming = true;
StorageFile videoFile = await cameraCaptureUI.CaptureFileAsync(CameraCaptureUIMode.Video);
if (videoFile != null)
{
// Video capture was successful
// Show the captured video in a MediaPlayerElement control
mediaPlayerElement.Source = MediaSource.CreateFromStorageFile(videoFile);
mediaPlayerElement.MediaPlayer.Play();
}
else
{
// Video capture failed or was cancelled
}
Spostare e rinominare i file multimediali acquisiti
CameraCaptureUI crea nomi casuali per i file multimediali acquisiti, quindi è possibile rinominare e spostare i file acquisiti per mantenerli organizzati. Nell'esempio seguente viene spostato e rinominato un file acquisito.
StorageFile photo = await cameraCaptureUI.CaptureFileAsync(CameraCaptureUIMode.Photo);
if (photo != null)
{
// Move and rename captured photo
StorageFolder destinationFolder =
await ApplicationData.Current.LocalFolder.CreateFolderAsync("ProfilePhotoFolder",
CreationCollisionOption.OpenIfExists);
await photo.CopyAsync(destinationFolder, "ProfilePhoto.jpg", NameCollisionOption.ReplaceExisting);
await photo.DeleteAsync();
}