CameraView

Ele CameraView fornece a capacidade de se conectar a uma câmera, exibir uma visualização da câmera, tirar fotos e gravar vídeos. O CameraView também oferece recursos para dar suporte ao controle do flash e da tocha, ajustando o zoom, salvando mídia capturada em um arquivo e oferecendo ganchos diferentes para eventos.

As seções a seguir desenvolverão gradualmente como usar o CameraView em um aplicativo .NET MAUI. Eles contam com o uso de um CameraViewModel. que será definido como o BindingContext do exemplo CameraViewPage.

Inicialização específica da plataforma

O CameraView faz parte do CommunityToolkit.Maui.Camera pacote nuget. Para usar o CameraView pela primeira vez, consulte a seção Primeiros passos. A seguinte configuração específica da plataforma é necessária.

As seguintes permissões precisam ser adicionadas ao arquivo Platforms/Android/AndroidManifest.xml:

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

Caso planeje gravar vídeo, solicite permissões de microfone:

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

Isso deve ser adicionado dentro do elemento <manifest>. Abaixo mostra um exemplo mais 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>

Uso básico

O CameraView pode ser adicionado a um aplicativo .NET MAUI da seguinte maneira.

Solicitar permissões

Os desenvolvedores devem solicitar manualmente as permissões de câmera e/ou microfone.

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

Caso planeje gravar vídeo, solicite permissões de microfone:

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

Incluir o namespace XAML

Para usar o kit de ferramentas no XAML, o xmlns a seguir precisa ser adicionado à sua página ou exibição:

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

Portanto, o seguinte:

<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>

Seria modificado para incluir o xmlns conforme o seguinte:

<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>

O resultado será uma superfície que renderiza a saída da câmera padrão conectada ao dispositivo.

Acesse a câmera atual

A propriedade SelectedCamera oferece a capacidade de acessar a câmera atualmente selecionada.

O exemplo a seguir mostra como vincular a propriedade SelectedCamera do CameraView a uma propriedade no CameraViewModel com o mesmo 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>

Controles de Zoom

A propriedade SelectedCamera fornece tanto uma propriedade MinimumZoomFactor quanto uma propriedade MaximumZoomFactor, ambas são somente leitura e fornecem aos desenvolvedores uma maneira programática de determinar qual zoom pode ser aplicado à câmera atual. Para alterar o zoom na câmera atual o CameraView fornece a propriedade ZoomFactor.

Observação

Se um valor for fornecido fora de MinimumZoomFactor e MaximumZoomFactor, CameraView fixará o valor para mantê-lo dentro dos limites.

O exemplo a seguir mostra como adicionar um Slider ao aplicativo e configurar as seguintes ligações:

  • Vincule a Maximum propriedade do Slider à propriedade MaximumZoomFactor do SelectedCamera.
  • Vincule a Minimum propriedade do Slider à propriedade MinimumZoomFactor do SelectedCamera.
  • Vincule a propriedade Value do Slider à propriedade CurrentZoom da classe CameraViewModel.

A mudança final envolve vincular a propriedade ZoomFactor do CameraView à propriedade CurrentZoom da classe CameraViewModel.

<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>

Modo Flash da Câmera

O CameraView fornece a capacidade de alterar programaticamente o modo de flash no dispositivo, as opções possíveis são:

  • Off - o flash está desligado e não será usado.
  • On - o flash está ligado e sempre será usado.
  • Auto - o flash será usado automaticamente com base nas condições de iluminação.

A propriedade SelectedCamera também fornece o IsFlashSupported que permite determinar se a câmera atualmente selecionada possui um flash que pode ser controlado.

O exemplo a seguir mostra como adicionar um Picker ao aplicativo e configurar as seguintes ligações:

  • Vincule a IsVisible propriedade do Picker à propriedade IsFlashSupported do SelectedCamera.
  • Vincule a propriedade ItemsSource do Picker à propriedade FlashModes na classe CameraViewModel - uma lista simples dos valores possíveis da CameraFlashMode enumeração.
  • Vincule a propriedade SelectedItem do Picker à propriedade FlashMode da classe CameraViewModel.

A mudança final envolve vincular a propriedade CameraFlashMode do CameraView à propriedade FlashMode da classe CameraViewModel.

<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>

Resolução de Captura de Imagem

O CameraView fornece a capacidade de alterar programaticamente a resolução das imagens capturadas da câmera atual.

Observação

Isso não alterará a resolução exibida na visualização da câmera.

A propriedade SelectedCamera também fornece o SupportedResolutions que permite determinar quais resoluções a câmera atual suporta.

O exemplo a seguir mostra como adicionar um Picker ao aplicativo e configurar as seguintes ligações:

  • Vincule a ItemsSource propriedade do Picker à propriedade SupportedResolutions do SelectedCamera.
  • Vincule a propriedade SelectedItem do Picker à propriedade SelectedResolution da classe CameraViewModel.

A mudança final envolve vincular a propriedade ImageCaptureResolution do CameraView à propriedade SelectedResolution da classe CameraViewModel.

<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

O CameraView fornece a capacidade de acionar programaticamente uma captura de imagem. Isso é possível através do método CaptureImage ou do método CaptureImageCommand.

O exemplo a seguir mostra como adicionar um Button ao aplicativo e configurar as seguintes ligações:

  • Vincule a propriedade Command do Button à propriedade CaptureImageCommand no 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>

Observação

Para utilizar a imagem que foi capturada o CameraView fornece o evento MediaCaptured.

O exemplo a seguir demonstra como usar o CaptureImage método:

Observação

O código C# abaixo usa o campo Câmera definido acima em 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);
    }
}

Gravação de vídeo

O CameraView fornece a capacidade de gravar vídeos. Isso é possível através do método StartVideoRecording ou do método StartVideoRecordingCommand.

O exemplo a seguir mostra como adicionar um Button ao aplicativo e configurar as seguintes ligações:

  • Vincule a propriedade Command do Button à propriedade StartVideoRecordingCommand no 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>

Observação

Você deve fornecer um fluxo limpo para gravar o vídeo.

O exemplo a seguir demonstra como usar o StartVideoRecording método:

Observação

O código C# abaixo usa o campo Câmera definido acima em 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);
}

Caso deseje gravar um vídeo curto em MemoryStream, você poderá usar a próxima sobrecarga da classe 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);
}

Iniciar visualização

O CameraView fornece a capacidade de iniciar de forma programática a visualização da câmera. Isso é possível através do método StartCameraPreview ou do método StartCameraPreviewCommand.

O exemplo a seguir mostra como adicionar um Button ao aplicativo e configurar as seguintes ligações:

  • Vincule a propriedade Command do Button à propriedade StartCameraPreviewCommand no 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>

O exemplo a seguir demonstra como usar o StartCameraPreview método:

Observação

O código C# abaixo usa o campo Câmera definido acima em 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);
    }
}

Parar visualização

O CameraView fornece a capacidade de interromper a visualização da câmera por meio de programação. Isso é possível através do método StopCameraPreview ou do método StopCameraPreviewCommand.

O exemplo a seguir mostra como adicionar um Button ao aplicativo e configurar as seguintes ligações:

  • Vincule a propriedade Command do Button à propriedade StopCameraPreviewCommand no 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>

O exemplo a seguir demonstra como usar o StopCameraPreview método:

Observação

O código C# abaixo usa o campo Câmera definido acima em 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);
    }
}

Propriedades

Propriedade Tipo Descrição Valor Padrão
CameraFlashMode CameraFlashMode Obtém ou define o modo flash para a câmera. Esta é uma propriedade vinculável. CameraFlashMode.Off
ImageCaptureResolution Size Obtém ou define a resolução para captura de imagem. Não afeta a resolução da pré-visualização. Esta é uma propriedade vinculável. Size.Zero
IsAvailable bool Obtém se a câmera está disponível no dispositivo. Essa é uma propriedade vinculável somente leitura. false
IsBusy bool Obtém se a câmera está ocupada no momento (por exemplo, capturando uma imagem ou gravação). Esta é uma propriedade vinculável somente leitura. false
IsTorchOn bool Obtém ou define se a lanterna da câmera está habilitada. Esta é uma propriedade vinculável. false
SelectedCamera CameraInfo? Obtém ou define o dispositivo de câmera selecionado no momento. Esta é uma propriedade vinculável com vinculação bidirecional. null
ZoomFactor float Obtém ou define o fator de zoom da câmera. O valor é fixado automaticamente aos MinimumZoomFactor e MaximumZoomFactor da câmera selecionada. Esta é uma propriedade vinculável. 1f

Comandos

Command Parâmetro de comando Descrição
CaptureImageCommand Dispara uma captura de imagem. A imagem capturada é retornada por meio do MediaCaptured evento.
StartCameraPreviewCommand Inicia a exibição de visualização da câmera.
StartVideoRecordingCommand Stream (opcional) Inicia a gravação de vídeo. Opcionalmente, passe um Stream para gravar.
StopCameraPreviewCommand Interrompe a exibição de visualização da câmera.
StopVideoRecordingCommand Interrompe a gravação de vídeo e retorna o fluxo gravado.

Eventos

Acontecimento Tipo Descrição
MediaCaptured EventHandler<MediaCapturedEventArgs> Gerado quando uma imagem é capturada com êxito. O MediaCapturedEventArgs contém uma propriedade Media do tipo Stream com os dados de imagem capturados.
MediaCaptureFailed EventHandler<MediaCaptureFailedEventArgs> Acionado quando uma captura de imagem falha. O MediaCaptureFailedEventArgs contém uma propriedade FailureReason com a mensagem de erro.

Methods

Método Tipo de retorno Descrição
CaptureImage(CancellationToken) Task Captura uma única imagem da câmera. O resultado é entregue via o evento MediaCaptured.
GetAvailableCameras(CancellationToken) ValueTask<IReadOnlyList<CameraInfo>> Recupera uma lista de dispositivos de câmera disponíveis no dispositivo.
StartCameraPreview(CancellationToken) Task Começa a exibir a visualização da câmera.
StartVideoRecording(CancellationToken) Task Inicia a gravação de vídeo em um MemoryStream interno.
StartVideoRecording(Stream, CancellationToken) Task Inicia a gravação de vídeo para o destino fornecido Stream.
StopCameraPreview() void Para de exibir a pré-visualização da câmera.
StopVideoRecording(CancellationToken) Task<Stream> Interrompe a gravação de vídeo e retorna o gravado Stream.

CameraInfo

A CameraInfo classe representa informações sobre um dispositivo de câmera disponível no sistema.

Propriedade Tipo Descrição
DeviceId string O identificador exclusivo do dispositivo de câmera.
IsFlashSupported bool Se a câmera dá suporte a flash.
MaximumZoomFactor float O fator de zoom máximo suportado.
MinimumZoomFactor float O fator de zoom mínimo com suporte.
Name string O nome do dispositivo de câmera.
Position CameraPosition A posição física da câmera no dispositivo (FrontouRearUnknown).
SupportedResolutions IReadOnlyList<Size> A lista de resoluções com suporte da câmera para captura de imagem.

CameraFlashMode

A CameraFlashMode enumeração define os modos flash disponíveis.

Valor Descrição
Off O flash está desativado e não será usado.
On O flash está ativado e sempre será usado.
Auto O flash será usado automaticamente com base nas condições de iluminação.

CameraPosition

A CameraPosition enumeração define as possíveis posições físicas de uma câmera em um dispositivo.

Valor Descrição
Unknown A posição da câmera é desconhecida.
Front A câmera está na frente do dispositivo (voltada para o usuário).
Rear A câmera está na parte traseira do dispositivo (voltada para longe do usuário).

Exemplos

Você pode encontrar um exemplo desse recurso na prática em Aplicativo de exemplo do Kit de Ferramentas da Comunidade do .NET MAUI.

API

O código-fonte do CameraView pode ser encontrado no repositório GitHub do .NET MAUI Community Toolkit.