Condividi tramite


Vista della Fotocamera

Offre CameraView la possibilità di connettersi a una fotocamera, visualizzare un'anteprima dalla fotocamera, scattare foto e registrare video. Offre CameraView inoltre funzionalità per supportare il controllo del flash e della torcia, regolare lo zoom, salvare i media acquisiti in un file e implementare diversi hook per gli eventi.

Le sezioni seguenti si baseranno in modo incrementale su come usare CameraView in un'applicazione MAUI .NET. Si basano sull'uso di CameraViewModel. che verrà impostato come il BindingContext dell'esempio CameraViewPage.

Inizializzazione specifica della piattaforma

Il CameraView fa parte del CommunityToolkit.Maui.Camera pacchetto NuGet. Per il primo utilizzo, CameraView fare riferimento alla sezione Guida introduttiva. È necessaria la configurazione specifica della piattaforma seguente.

Devono essere aggiunte le seguenti autorizzazioni al file Platforms/Android/AndroidManifest.xml:

<uses-permission android:name="android.permission.CAMERA" />

Se si prevede di registrare video, richiedere le autorizzazioni microfono:

<uses-permission android:name="android.permission.RECORD_AUDIO" />

Deve essere aggiunto all'interno dell'elemento <manifest> . Di seguito è riportato un esempio più completo:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true" />

    <uses-permission android:name="android.permission.CAMERA" />

    <!--Optional. Only for video recording-->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />

</manifest>

Utilizzo di base

L'oggetto CameraView può essere aggiunto a un'applicazione MAUI .NET nel modo seguente.

Richiedere autorizzazioni

Gli sviluppatori devono richiedere manualmente i permessi per la fotocamera e/o il microfono:

var cameraPermissionsRequest = await Permissions.RequestAsync<Permissions.Camera>();

Se si prevede di registrare video, richiedere le autorizzazioni microfono:

var microphonePermissionsRequest = await Permissions.RequestAsync<Permissions.Microphone>();

Inclusione dello spazio dei nomi XAML

Per usare il toolkit in XAML, è necessario aggiungere le informazioni seguenti xmlns nella pagina o nella visualizzazione:

xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"

Di conseguenza:

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml">

</ContentPage>

Verrà modificato in modo da includere l'oggetto xmlns come indicato di seguito:

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.MyPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">

</ContentPage>
<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.CameraViewPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
    
    <Grid ColumnDefinitions="*,*,*" RowDefinitions="*,30">
        <toolkit:CameraView 
            Grid.ColumnSpan="3" 
            Grid.Row="0" />
    </Grid>

</ContentPage>

Il risultato sarà una superficie che renderizza l'output della fotocamera predefinita connessa al dispositivo.

Accedere alla fotocamera corrente

La SelectedCamera proprietà consente di accedere alla fotocamera attualmente selezionata.

Nell'esempio seguente viene illustrato come associare la SelectedCamera proprietà da CameraView a una proprietà in CameraViewModel con lo stesso nome (SelectedCamera).

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.CameraViewPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
    
    <Grid ColumnDefinitions="*,*,*" RowDefinitions="*,30,30">
        <toolkit:CameraView 
            Grid.ColumnSpan="3" 
            Grid.Row="0" 
            SelectedCamera="{Binding SelectedCamera}" />
    </Grid>

</ContentPage>

Controlla lo zoom

La SelectedCamera proprietà fornisce sia una MinimumZoomFactor proprietà che una MaximumZoomFactor proprietà, che sono di sola lettura e forniscono agli sviluppatori un modo programmatico per determinare quale zoom può essere applicato alla fotocamera corrente. Per modificare lo zoom sulla fotocamera corrente, il CameraView fornisce la proprietà ZoomFactor.

Nota

Se viene fornito un valore all'esterno di MinimumZoomFactor e MaximumZoomFactor verrà CameraView bloccato il valore per mantenerlo all'interno dei limiti.

Nell'esempio seguente viene illustrato come aggiungere un oggetto Slider all'applicazione e configurare le associazioni seguenti:

  • Associare la Maximum proprietà di Slider alla MaximumZoomFactor di SelectedCamera.
  • Associare la Minimum proprietà di Slider alla MinimumZoomFactor di SelectedCamera.
  • Associare la proprietà Value di Slider alla proprietà CurrentZoom nella classe CameraViewModel.

La modifica finale comporta l'associazione della ZoomFactor proprietà dell'oggetto CameraView alla CurrentZoom proprietà nella CameraViewModel classe .

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.CameraViewPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
    
    <Grid ColumnDefinitions="*,*,*" RowDefinitions="*,30,30">
        <toolkit:CameraView 
            Grid.ColumnSpan="3" 
            Grid.Row="0"
            SelectedCamera="{Binding SelectedCamera}"
            ZoomFactor="{Binding CurrentZoom}" />

        <Slider 
            Grid.Column="0"
            Grid.Row="1"
            Value="{Binding CurrentZoom}"
            Maximum="{Binding SelectedCamera.MaximumZoomFactor, FallbackValue=1}"
            Minimum="{Binding SelectedCamera.MinimumZoomFactor, FallbackValue=1}"/>
    </Grid>

</ContentPage>

Modalità flash fotocamera

Offre CameraView la possibilità di modificare a livello di codice la modalità flash nel dispositivo, le possibili opzioni sono:

  • Off- il flash è spento e non verrà usato.
  • On - il flash è acceso e verrà sempre usato.
  • Auto - il flash verrà utilizzato automaticamente in base alle condizioni di illuminazione.

La SelectedCamera proprietà fornisce anche il IsFlashSupported che consente di determinare se la fotocamera attualmente selezionata ha un flash che può essere controllato.

Nell'esempio seguente viene illustrato come aggiungere un oggetto Picker all'applicazione e configurare le associazioni seguenti:

  • Associare la IsVisible proprietà di Picker alla IsFlashSupported di SelectedCamera.
  • Associare la ItemsSource proprietà dell'oggetto Picker alla FlashModes proprietà nella CameraViewModel classe , un semplice elenco dei valori possibili dell'enumerazione CameraFlashMode .
  • Associare la proprietà SelectedItem di Picker alla proprietà FlashMode nella classe CameraViewModel.

La modifica finale comporta l'associazione della CameraFlashMode proprietà dell'oggetto CameraView alla FlashMode proprietà nella CameraViewModel classe .

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.CameraViewPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
    
    <Grid ColumnDefinitions="*,*,*" RowDefinitions="*,30,30">
        <toolkit:CameraView 
            Grid.ColumnSpan="3" 
            Grid.Row="0"
            SelectedCamera="{Binding SelectedCamera}"
            ZoomFactor="{Binding CurrentZoom}"
            CameraFlashMode="{Binding FlashMode}" />

        <Slider 
            Grid.Column="0"
            Grid.Row="1"
            Value="{Binding CurrentZoom}"
            Maximum="{Binding SelectedCamera.MaximumZoomFactor, FallbackValue=1}"
            Minimum="{Binding SelectedCamera.MinimumZoomFactor, FallbackValue=1}"/>

        <Picker 
            Grid.Column="1"
            Grid.Row="1"
            Title="Flash"
            IsVisible="{Binding Path=SelectedCamera.IsFlashSupported, FallbackValue=false}"
            ItemsSource="{Binding FlashModes}"
            SelectedItem="{Binding FlashMode}" />
    </Grid>

</ContentPage>

ImageCaptureResolution

CameraView offre la possibilità di modificare la risoluzione delle immagini acquisite dalla fotocamera corrente a livello di programmazione.

Nota

La risoluzione visualizzata nell'anteprima non verrà modificata dalla fotocamera.

La SelectedCamera proprietà fornisce anche il SupportedResolutions che consente di determinare quali risoluzioni supportano la fotocamera corrente.

Nell'esempio seguente viene illustrato come aggiungere un oggetto Picker all'applicazione e configurare le associazioni seguenti:

  • Associare la ItemsSource proprietà di Picker alla SupportedResolutions di SelectedCamera.
  • Associare la proprietà SelectedItem di Picker alla proprietà SelectedResolution nella classe CameraViewModel.

La modifica finale comporta l'associazione della ImageCaptureResolution proprietà dell'oggetto CameraView alla SelectedResolution proprietà nella CameraViewModel classe .

<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.CameraViewPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
    
    <Grid ColumnDefinitions="*,*,*" RowDefinitions="*,30,30">
        <toolkit:CameraView 
            Grid.ColumnSpan="3" 
            Grid.Row="0"
            SelectedCamera="{Binding SelectedCamera}"
            ZoomFactor="{Binding CurrentZoom}"
            CameraFlashMode="{Binding FlashMode}"
            ImageCaptureResolution="{Binding SelectedResolution}" />

        <Slider 
            Grid.Column="0"
            Grid.Row="1"
            Value="{Binding CurrentZoom}"
            Maximum="{Binding SelectedCamera.MaximumZoomFactor, FallbackValue=1}"
            Minimum="{Binding SelectedCamera.MinimumZoomFactor, FallbackValue=1}"/>

        <Picker 
            Grid.Column="1"
            Grid.Row="1"
            Title="Flash"
            IsVisible="{Binding Path=SelectedCamera.IsFlashSupported, FallbackValue=false}"
            ItemsSource="{Binding FlashModes}"
            SelectedItem="{Binding FlashMode}" />

        <Picker 
            Grid.Column="2"
            Grid.Row="1"
            Title="Available Resolutions"
            ItemsSource="{Binding SelectedCamera.SupportedResolutions}"
            SelectedItem="{Binding SelectedResolution}" />
    </Grid>

</ContentPage>

CaptureImage

CameraView Offre la possibilità di attivare a livello di codice un'acquisizione di immagini. Ciò è possibile tramite sia il CaptureImage metodo che l'oggetto CaptureImageCommand.

Nell'esempio seguente viene illustrato come aggiungere un oggetto Button all'applicazione e configurare le associazioni seguenti:

  • Associare la Command proprietà dell'oggetto Button alla CaptureImageCommand proprietà nell'oggetto CameraView.
<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.CameraViewPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
    
    <Grid ColumnDefinitions="*,*,*" RowDefinitions="*,30,30">
        <toolkit:CameraView
            x:Name="Camera" 
            Grid.ColumnSpan="3" 
            Grid.Row="0"
            SelectedCamera="{Binding SelectedCamera}"
            ZoomFactor="{Binding CurrentZoom}"
            CameraFlashMode="{Binding FlashMode}" />

        <Slider 
            Grid.Column="0"
            Grid.Row="1"
            Value="{Binding CurrentZoom}"
            Maximum="{Binding SelectedCamera.MaximumZoomFactor, FallbackValue=1}"
            Minimum="{Binding SelectedCamera.MinimumZoomFactor, FallbackValue=1}"/>

        <Picker 
            Grid.Column="1"
            Grid.Row="1"
            Title="Flash"
            IsVisible="{Binding Path=SelectedCamera.IsFlashSupported, FallbackValue=false}"
            ItemsSource="{Binding FlashModes}"
            SelectedItem="{Binding FlashMode}" />

        <Picker 
            Grid.Column="2"
            Grid.Row="1"
            Title="Available Resolutions"
            ItemsSource="{Binding SelectedCamera.SupportedResolutions}"
            SelectedItem="{Binding SelectedResolution}" />

        <Button
            Grid.Column="0"
            Grid.Row="2"
            Command="{Binding CaptureImageCommand, Source={x:Reference Camera}}"
            Text="Capture Image" />
    </Grid>

</ContentPage>

Nota

Per usare l'immagine acquisita, il CameraView fornisce l'evento MediaCaptured.

Nell'esempio seguente viene illustrato come usare il CaptureImage metodo :

Nota

Il codice C# seguente usa il campo Fotocamera definito in precedenza in XAML (<toolkit:CameraView x:Name="Camera" />)

async void HandleCaptureButtonTapped(object? sender, EventArgs e)
{
    try
    {
        // Use the Camera field defined above in XAML (`<toolkit:CameraView x:Name="Camera" />`)
        var captureImageCTS = new CancellationTokenSource(TimeSpan.FromSeconds(3));
        Stream stream = await Camera.CaptureImage(captureImageCTS.Token);
    }
    catch(Exception e)
    {
        // Handle Exception
        Trace.WriteLine(e);
    }
}

Registrazione video

CameraView offre la possibilità di registrare video. Ciò è possibile tramite sia il StartVideoRecording metodo che l'oggetto StartVideoRecordingCommand.

Nell'esempio seguente viene illustrato come aggiungere un oggetto Button all'applicazione e configurare le associazioni seguenti:

  • Associare la Command proprietà dell'oggetto Button alla StartVideoRecordingCommand proprietà nell'oggetto CameraView.
<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.CameraViewPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
    
    <Grid ColumnDefinitions="*,*,*" RowDefinitions="*,30,30">
        <toolkit:CameraView
            x:Name="Camera" 
            Grid.ColumnSpan="3" 
            Grid.Row="0"
            SelectedCamera="{Binding SelectedCamera}"
            ZoomFactor="{Binding CurrentZoom}"
            CameraFlashMode="{Binding FlashMode}" />

        <Slider 
            Grid.Column="0"
            Grid.Row="1"
            Value="{Binding CurrentZoom}"
            Maximum="{Binding SelectedCamera.MaximumZoomFactor, FallbackValue=1}"
            Minimum="{Binding SelectedCamera.MinimumZoomFactor, FallbackValue=1}"/>

        <Picker 
            Grid.Column="1"
            Grid.Row="1"
            Title="Flash"
            IsVisible="{Binding Path=SelectedCamera.IsFlashSupported, FallbackValue=false}"
            ItemsSource="{Binding FlashModes}"
            SelectedItem="{Binding FlashMode}" />

        <Picker 
            Grid.Column="2"
            Grid.Row="1"
            Title="Available Resolutions"
            ItemsSource="{Binding SelectedCamera.SupportedResolutions}"
            SelectedItem="{Binding SelectedResolution}" />

        <Button Clicked="StartCameraRecording"
                Text="StartVideoRecording" />

        <Button Command="{Binding StartVideoRecordingCommand, Source={x:Reference Camera}, x:DataType=toolkit:CameraView}"
                CommandParameter="{Binding Stream}"
                Text="StartVideoRecording" />

        <Button Command="{Binding StopVideoRecordingCommand, Source={x:Reference Camera}, x:DataType=toolkit:CameraView}"
                CommandParameter="{Binding Token}"
                Text="StopVideoRecording" />
    </Grid>

</ContentPage>

Nota

È necessario fornire un flusso pulito per registrare il video.

Nell'esempio seguente viene illustrato come usare il StartVideoRecording metodo :

Nota

Il codice C# seguente usa il campo Fotocamera definito in precedenza in XAML (<toolkit:CameraView x:Name="Camera" />)

async void StartCameraRecordingWithCustomStream(object? sender, EventArgs e)
{
    using var threeSecondVideoRecordingStream = new FileStream("recording.mp4", FileMode.Create);
    await Camera.StartVideoRecording(threeSecondVideoRecordingStream, CancellationToken.None);

    await Task.Delay(TimeSpan.FromSeconds(3));
    
    await Camera.StopVideoRecording(CancellationToken.None);
    await FileSaver.SaveAsync("recording.mp4", threeSecondVideoRecordingStream);
}

Se vuoi registrare un breve video e registrare video in MemoryStream puoi usare l'overload successivo di VideoRecording:

async void StartCameraRecording(object? sender, EventArgs e)
{
    await Camera.StartVideoRecording(CancellationToken.None);
    
    await Task.Delay(TimeSpan.FromSeconds(3));
    
    var threeSecondVideoRecordingStream = await Camera.StopVideoRecording(CancellationToken.None);
    await FileSaver.SaveAsync("recording.mp4", threeSecondVideoRecordingStream);
}

Avvia anteprima

Offre CameraView la possibilità di avviare programmaticamente l'anteprima dalla fotocamera. Ciò è possibile tramite sia il StartCameraPreview metodo che l'oggetto StartCameraPreviewCommand.

Nell'esempio seguente viene illustrato come aggiungere un oggetto Button all'applicazione e configurare le associazioni seguenti:

  • Associare la Command proprietà dell'oggetto Button alla StartCameraPreviewCommand proprietà nell'oggetto CameraView.
<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.CameraViewPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
    
    <Grid ColumnDefinitions="*,*,*" RowDefinitions="*,30,30">
        <toolkit:CameraView
            x:Name="Camera"  
            Grid.ColumnSpan="3" 
            Grid.Row="0"
            SelectedCamera="{Binding SelectedCamera}"
            ZoomFactor="{Binding CurrentZoom}"
            CameraFlashMode="{Binding FlashMode}" />

        <Slider 
            Grid.Column="0"
            Grid.Row="1"
            Value="{Binding CurrentZoom}"
            Maximum="{Binding SelectedCamera.MaximumZoomFactor, FallbackValue=1}"
            Minimum="{Binding SelectedCamera.MinimumZoomFactor, FallbackValue=1}"/>

        <Picker 
            Grid.Column="1"
            Grid.Row="1"
            Title="Flash"
            IsVisible="{Binding Path=SelectedCamera.IsFlashSupported, FallbackValue=false}"
            ItemsSource="{Binding FlashModes}"
            SelectedItem="{Binding FlashMode}" />

        <Picker 
            Grid.Column="2"
            Grid.Row="1"
            Title="Available Resolutions"
            ItemsSource="{Binding SelectedCamera.SupportedResolutions}"
            SelectedItem="{Binding SelectedResolution}" />

        <Button
            Grid.Column="0"
            Grid.Row="2"
            Command="{Binding CaptureImageCommand, Source={x:Reference Camera}}"
            Text="Capture Image" />

        <Button
            Grid.Column="1"
            Grid.Row="2"
            Command="{Binding StartCameraPreviewCommand, Source={x:Reference Camera}}"
            Text="Start Preview" />
    </Grid>

</ContentPage>

Nell'esempio seguente viene illustrato come usare il StartCameraPreview metodo :

Nota

Il codice C# seguente usa il campo Fotocamera definito in precedenza in XAML (<toolkit:CameraView x:Name="Camera" />)

async void HandleStartCameraPreviewButtonTapped(object? sender, EventArgs e)
{

    try
    {
        var startCameraPreviewTCS = new CancellationTokenSource(TimeSpan.FromSeconds(3));

        // Use the Camera field defined above in XAML (`<toolkit:CameraView x:Name="Camera" />`)
        await Camera.StartCameraPreview(startCameraPreviewTCS.Token);
    }
    catch(Exception e)
    {
        // Handle Exception
        Trace.WriteLine(e);
    }
}

Interrompi anteprima

Offre CameraView la possibilità di arrestare programmaticamente l'anteprima dalla fotocamera. Ciò è possibile tramite sia il StopCameraPreview metodo che l'oggetto StopCameraPreviewCommand.

Nell'esempio seguente viene illustrato come aggiungere un oggetto Button all'applicazione e configurare le associazioni seguenti:

  • Associare la Command proprietà dell'oggetto Button alla StopCameraPreviewCommand proprietà nell'oggetto CameraView.
<ContentPage
    x:Class="CommunityToolkit.Maui.Sample.Pages.CameraViewPage"
    xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit">
    
    <Grid ColumnDefinitions="*,*,*" RowDefinitions="*,30,30">
        <toolkit:CameraView
            x:Name="Camera"  
            Grid.ColumnSpan="3" 
            Grid.Row="0"
            SelectedCamera="{Binding SelectedCamera}"
            ZoomFactor="{Binding CurrentZoom}"
            CameraFlashMode="{Binding FlashMode}" />

        <Slider 
            Grid.Column="0"
            Grid.Row="1"
            Value="{Binding CurrentZoom}"
            Maximum="{Binding SelectedCamera.MaximumZoomFactor, FallbackValue=1}"
            Minimum="{Binding SelectedCamera.MinimumZoomFactor, FallbackValue=1}"/>

        <Picker 
            Grid.Column="1"
            Grid.Row="1"
            Title="Flash"
            IsVisible="{Binding Path=SelectedCamera.IsFlashSupported, FallbackValue=false}"
            ItemsSource="{Binding FlashModes}"
            SelectedItem="{Binding FlashMode}" />

        <Picker 
            Grid.Column="2"
            Grid.Row="1"
            Title="Available Resolutions"
            ItemsSource="{Binding SelectedCamera.SupportedResolutions}"
            SelectedItem="{Binding SelectedResolution}" />

        <Button
            Grid.Column="0"
            Grid.Row="2"
            Command="{Binding CaptureImageCommand, Source={x:Reference Camera}}"
            Text="Capture Image" />

        <Button
            Grid.Column="1"
            Grid.Row="2"
            Command="{Binding StartCameraPreviewCommand, Source={x:Reference Camera}}"
            Text="Start Preview" />

        <Button
            Grid.Column="2"
            Grid.Row="2"
            Command="{Binding StopCameraPreviewCommand, Source={x:Reference Camera}}"
            Text="Stop Preview" />
    </Grid>

</ContentPage>

Nell'esempio seguente viene illustrato come usare il StopCameraPreview metodo :

Nota

Il codice C# seguente usa il campo Fotocamera definito in precedenza in XAML (<toolkit:CameraView x:Name="Camera" />)

void HandleStopCameraPreviewButtonTapped(object? sender, EventArgs e)
{

    try
    {
        // Use the Camera field defined above in XAML (`<toolkit:CameraView x:Name="Camera" />`)
        Camera.StopCameraPreview();
    }
    catch(Exception e)
    {
        // Handle Exception
        Trace.WriteLine(e);
    }
}

Proprietà

Proprietà Tipo Descrizione Valore predefinito
CameraFlashMode CameraFlashMode Ottiene o imposta la modalità flash per la fotocamera. Si tratta di una proprietà associabile. CameraFlashMode.Off
ImageCaptureResolution Size Ottiene o imposta la risoluzione per l'acquisizione di immagini. Non influisce sulla risoluzione dell'anteprima. Si tratta di una proprietà associabile. Size.Zero
IsAvailable bool Ottiene un valore che indica se la fotocamera è disponibile nel dispositivo. Si tratta di una proprietà associabile di sola lettura. false
IsBusy bool Ottiene un valore che indica se la fotocamera è attualmente occupata,ad esempio l'acquisizione di un'immagine o di una registrazione. Si tratta di una proprietà associabile di sola lettura. false
IsTorchOn bool Ottiene o imposta se la torcia della fotocamera è abilitata. Si tratta di una proprietà associabile. false
SelectedCamera CameraInfo? Ottiene o imposta il dispositivo fotocamera attualmente selezionato. Si tratta di una proprietà associabile con associazione bidirezionale. null
ZoomFactor float Ottiene o imposta il fattore di zoom della fotocamera. Il valore viene automaticamente limitato alla gamma selezionata dalla fotocamera tra MinimumZoomFactor e MaximumZoomFactor. Si tratta di una proprietà associabile. 1f

Comandi

Comando Parametro del comando Descrizione
CaptureImageCommand - Attiva un'acquisizione di immagini. L'immagine acquisita viene restituita tramite l'evento MediaCaptured .
StartCameraPreviewCommand - Avvia la visualizzazione dell'anteprima della fotocamera.
StartVideoRecordingCommand Stream (facoltativo) Avvia la registrazione video. Facoltativamente, passare un oggetto a cui eseguire il Stream record.
StopCameraPreviewCommand - Arresta la visualizzazione dell'anteprima della fotocamera.
StopVideoRecordingCommand - Arresta la registrazione video e restituisce il flusso registrato.

Events

Event Tipo Descrizione
MediaCaptured EventHandler<MediaCapturedEventArgs> Generato quando un'immagine viene acquisita correttamente. Il MediaCapturedEventArgs contiene una proprietà Media di tipo Stream con i dati di immagine acquisiti.
MediaCaptureFailed EventHandler<MediaCaptureFailedEventArgs> Generato quando un'acquisizione di immagini ha esito negativo. Il MediaCaptureFailedEventArgs contiene una proprietà FailureReason con il messaggio di errore.

Methods

metodo Tipo di ritorno Descrizione
CaptureImage(CancellationToken) Task Acquisisce una singola immagine dalla fotocamera. Il risultato viene recapitato tramite l'evento MediaCaptured .
GetAvailableCameras(CancellationToken) ValueTask<IReadOnlyList<CameraInfo>> Recupera un elenco di dispositivi fotocamera disponibili nel dispositivo.
StartCameraPreview(CancellationToken) Task Avvia la visualizzazione dell'anteprima della fotocamera.
StartVideoRecording(CancellationToken) Task Avvia la registrazione video su un dispositivo interno MemoryStream.
StartVideoRecording(Stream, CancellationToken) Task Avvia la registrazione del video sull'unità fornita Stream.
StopCameraPreview() void Arresta la visualizzazione dell'anteprima della fotocamera.
StopVideoRecording(CancellationToken) Task<Stream> Arresta la registrazione video e restituisce la registrazione Stream.

CameraInfo

La CameraInfo classe rappresenta informazioni su un dispositivo fotocamera disponibile nel sistema.

Proprietà Tipo Descrizione
DeviceId string Identificatore univoco del dispositivo fotocamera.
IsFlashSupported bool Indica se la fotocamera supporta il flash.
MaximumZoomFactor float Fattore di zoom massimo supportato.
MinimumZoomFactor float Fattore di zoom minimo supportato.
Name string Nome del dispositivo fotocamera.
Position CameraPosition Posizione fisica della fotocamera nel dispositivo (Front, Rearo Unknown).
SupportedResolutions IReadOnlyList<Size> Elenco delle risoluzioni supportate dalla fotocamera per l'acquisizione di immagini.

CameraFlashMode

L'enumerazione CameraFlashMode definisce le modalità flash disponibili.

Valore Descrizione
Off Il flash è spento e non verrà utilizzato.
On Il flash è acceso e verrà sempre utilizzato.
Auto Il flash verrà utilizzato automaticamente in base alle condizioni di illuminazione.

CameraPosition

L'enumerazione CameraPosition definisce le possibili posizioni fisiche di una fotocamera in un dispositivo.

Valore Descrizione
Unknown La posizione della fotocamera è sconosciuta.
Front La fotocamera si trova nella parte anteriore del dispositivo (rivolta all'utente).
Rear La fotocamera si trova nella parte posteriore del dispositivo (rivolta lontano dall'utente).

Esempi

È possibile trovare un esempio di questa funzionalità in azione nell'applicazione di esempio .NET MAUI Community Toolkit.

API (Interfaccia di Programmazione delle Applicazioni)

È possibile trovare il codice sorgente per CameraView nel repository GitHub del .NET MAUI Community Toolkit.