CameraView
O CameraView
oferece a capacidade de conectar-se a uma câmera, exibir uma visualização da câmera e tirar fotos. O CameraView
também oferece recursos para tirar fotos, controlar o flash, salvar a mídia capturada em um arquivo e oferecer diversos ganchos 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" />
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" />
</manifest>
Uso básico
O CameraView
pode ser adicionado a um aplicativo .NET MAUI da seguinte maneira.
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>
Controlar zoom
A propriedade SelectedCamera
fornece uma propriedade MinimumZoomFactor
e uma propriedade MaximumZoomFactor
, essas 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 doSlider
à propriedadeMaximumZoomFactor
doSelectedCamera
. - Vincule a propriedade
Minimum
doSlider
aoMinimumZoomFactor
da propriedadeSelectedCamera
. - Vincule a propriedade
Value
doSlider
à propriedadeCurrentZoom
da classeCameraViewModel
.
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 propriedade
IsVisible
doPicker
aoIsFlashSupported
da propriedadeSelectedCamera
. - Vincule a propriedade
ItemsSource
doPicker
à propriedadeFlashModes
na classeCameraViewModel
- uma lista simples dos valores possíveis daCameraFlashMode
enumeração. - Vincule a propriedade
SelectedItem
doPicker
à propriedadeFlashMode
daCameraViewModel
classe.
A alteração 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>
ImageCaptureResolution
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 propriedade
ItemsSource
doPicker
aoSupportedResolutions
da propriedadeSelectedCamera
. - Vincule a propriedade
SelectedItem
doPicker
à propriedadeSelectedResolution
da classeCameraViewModel
.
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}" />
<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
doButton
à propriedadeCaptureImageCommand
noCameraView
.
<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
.
Iniciar visualização
O CameraView
fornece a capacidade de iniciar programaticamente 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
doButton
à propriedadeStartCameraPreviewCommand
noCameraView
.
<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="Capture Image" />
</Grid>
</ContentPage>
Parar visualização
O CameraView
fornece a capacidade de iniciar por meio de programação a visualização da câmera. 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
doButton
à propriedadeStopCameraPreviewCommand
noCameraView
.
<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="Capture Image" />
<Button
Grid.Column="2"
Grid.Row="2"
Command="{Binding StopCameraPreviewCommand, Source={x:Reference Camera}}"
Text="Capture Image" />
</Grid>
</ContentPage>
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.
.NET MAUI Community Toolkit