Vista da câmara

O CameraView permite a ligação a uma câmara, mostrar uma pré-visualização da câmara, tirar fotografias e gravar vídeos. Também CameraView oferece funcionalidades para controlar o flash e a lanterna, ajustar o zoom, guardar media capturada num ficheiro e oferecer diferentes ganchos para eventos.

As seções a seguir serão incrementalmente baseadas em como usar o CameraView em um aplicativo .NET MAUI. Baseiam-se na utilização 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 primeiro utilizar o CameraView, consulte a seção Introdução. É necessária a seguinte configuração específica da plataforma.

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

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

Caso planeie gravar vídeo, peça permissões de microfone:

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

Isso deve ser adicionado dentro do <manifest> elemento . 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>

Utilização básica

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

Pedir permissões

Os programadores devem solicitar manualmente permissões para a câmara e/ou para o microfone.

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

Caso planeie gravar vídeo, peça permissões de microfone:

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

Incluindo o namespace XAML

Para usar o kit de ferramentas em XAML, a seguinte xmlns precisa ser adicionada à sua página ou vista.

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

Por conseguinte, 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 da seguinte forma:

<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 renderizando a saída da câmera padrão conectada ao dispositivo.

Aceda à câmara atual

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

O exemplo a seguir mostra como vincular a SelectedCamera propriedade 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>

Controle de Zoom

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

Observação

Se um valor é fornecido fora do MinimumZoomFactor e MaximumZoomFactor o CameraView irá apertar o valor para mantê-lo dentro dos limites.

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

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

A alteração final envolve a vinculação da 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 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 será sempre usado.
  • Auto - O flash será usado automaticamente com base nas condições de iluminação.

A SelectedCamera propriedade também fornece o IsFlashSupported que torna possível determinar se a câmera atualmente selecionada tem um flash que pode ser controlado.

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

  • Vincular a propriedade do IsVisible ao Picker da propriedade IsFlashSupported.
  • Vincular a propriedade ItemsSource de Picker à propriedade FlashModes na classe CameraViewModel - uma lista simples dos valores possíveis do enumerador CameraFlashMode.
  • Vincule a propriedade SelectedItem do Picker à propriedade FlashMode na classe CameraViewModel.

A alteração final envolve a vinculação da 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çãoDeCapturaDeImagem

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

Observação

Isso não mudará a resolução que é exibida na pré-visualização da câmera.

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

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

  • Vincular a propriedade do ItemsSource ao Picker da propriedade SupportedResolutions.
  • Vincule a propriedade SelectedItem do Picker à propriedade SelectedResolution na classe CameraViewModel.

A alteração final envolve a vinculação da 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. Isto é possível através do CaptureImage método ou do CaptureImageCommand.

O exemplo a seguir mostra como adicionar um Button ao aplicativo e configurar as seguintes associaçõ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 usar a imagem que foi capturada, o CameraView fornece o MediaCaptured evento.

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

Observação

O código C# abaixo usa o campo Camera 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. Isto é possível através do StartVideoRecording método ou do StartVideoRecordingCommand.

O exemplo a seguir mostra como adicionar um Button ao aplicativo e configurar as seguintes associaçõ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 Camera 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);
}

No caso de você querer gravar um vídeo curto e gravar vídeo em MemoryStream você pode usar a próxima sobrecarga de 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 pré-visualização

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

O exemplo a seguir mostra como adicionar um Button ao aplicativo e configurar as seguintes associaçõ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 Camera 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 pré-visualização

O CameraView fornece a capacidade de parar programaticamente a visualização da câmera. Isto é possível através do StopCameraPreview método ou do StopCameraPreviewCommand.

O exemplo a seguir mostra como adicionar um Button ao aplicativo e configurar as seguintes associaçõ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 Camera 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 Recebe ou define o modo de flash da câmara. 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 de pré-visualização. Esta é uma propriedade vinculável. Size.Zero
IsAvailable bool Percebe se a câmara está disponível no dispositivo. Esta é uma propriedade vinculável apenas de leitura. false
IsBusy bool Percebe se a câmara está ocupada no momento (por exemplo, a captar uma imagem ou a gravar). Esta é uma propriedade vinculável apenas de leitura. false
IsTorchOn bool Obtém ou define se a lanterna da câmara está ativada. Esta é uma propriedade vinculável. false
SelectedCamera CameraInfo? Obtém ou define o dispositivo de câmara presentemente selecionado. Esta é uma propriedade vinculável com ligação bidirecional. null
ZoomFactor float Obtém ou define o fator de zoom da câmara. O valor é automaticamente fixado aos MinimumZoomFactor e MaximumZoomFactor da câmara selecionada. Esta é uma propriedade vinculável. 1f

Comandos

Comando Parâmetro de Comando Descrição
CaptureImageCommand Desencadeia uma captura de imagem. A imagem captada é devolvida através do MediaCaptured evento.
StartCameraPreviewCommand Inicia o ecrã de pré-visualização da câmara.
StartVideoRecordingCommand Stream (opcional) Inicia a gravação de vídeo. Pode opcionalmente passar um Stream para onde gravar.
StopCameraPreviewCommand Interrompe a pré-visualização da câmara.
StopVideoRecordingCommand Para a gravação de vídeo e retorna o fluxo gravado.

Events

Event Tipo Descrição
MediaCaptured EventHandler<MediaCapturedEventArgs> Eleva-se quando uma imagem é captada com sucesso. O MediaCapturedEventArgs contém uma propriedade Media de tipo Stream com os dados da imagem capturados.
MediaCaptureFailed EventHandler<MediaCaptureFailedEventArgs> É gerado 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 Capta uma única imagem da câmara. O resultado é transmitido através do MediaCaptured evento.
GetAvailableCameras(CancellationToken) ValueTask<IReadOnlyList<CameraInfo>> Recupera uma lista dos dispositivos de câmara disponíveis no dispositivo.
StartCameraPreview(CancellationToken) Task Começa a mostrar a pré-visualização da câmara.
StartVideoRecording(CancellationToken) Task Começa a gravar vídeo numa unidade interna MemoryStream.
StartVideoRecording(Stream, CancellationToken) Task Começa a gravar vídeo no arquivo fornecido Stream.
StopCameraPreview() void Deixa de mostrar a pré-visualização da câmara.
StopVideoRecording(CancellationToken) Task<Stream> Interrompe a gravação de vídeo e devolve a gravação Stream.

CameraInfo

A CameraInfo classe representa informação sobre um dispositivo de câmara disponível no sistema.

Propriedade Tipo Descrição
DeviceId string O identificador único do dispositivo da câmara.
IsFlashSupported bool Se a câmara suporta flash.
MaximumZoomFactor float O fator de zoom máximo suportado.
MinimumZoomFactor float O fator de zoom mínimo suportado.
Name string O nome do dispositivo da câmara.
Position CameraPosition A posição física da câmara no dispositivo (Front, Rear, ou Unknown).
SupportedResolutions IReadOnlyList<Size> A lista de resoluções suportadas pela câmara para captura de imagem.

Modo FlashCâmara

O CameraFlashMode enum define os modos de flash disponíveis.

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

CâmaraPosição

O CameraPosition enum define as possíveis posições físicas de uma câmara num dispositivo.

Value Descrição
Unknown A posição da câmara é desconhecida.
Front A câmara está na frente do dispositivo (virada para o utilizador).
Rear A câmara está na parte traseira do dispositivo (virada para longe do utilizador).

Exemplos

Você pode encontrar um exemplo desse recurso em ação no .NET MAUI Community Toolkit Sample Application.

API

Você pode encontrar o código-fonte para CameraView no repositório GitHub do .NET MAUI Community Toolkit.