CameraView
Die CameraView
bietet die Möglichkeit, eine Verbindung mit einer Kamera herzustellen, eine Vorschau von der Kamera anzuzeigen und Fotos aufzunehmen. Darüber hinaus bietet CameraView
Funktionen, die das Aufnehmen von Fotos unterstützen, den Blitz steuern, aufgenommene Medien in einer Datei speichern und verschiedene Hooks für Ereignisse anbieten.
In den folgenden Abschnitten wird schrittweise erläutert, wie Sie CameraView
in einer .NET MAUI-Anwendung verwenden. Sie bauen auf die Verwendung eines CameraViewModel
, das als BindingContext
des Beispiels CameraViewPage
festgelegt wird.
Plattformspezifische Initialisierung
Der CameraView
ist Teil des Nuget-Pakets CommunityToolkit.Maui.Camera
. Informationen zur ersten Verwendung von CameraView
finden Sie im Abschnitt Erste Schritte. Das folgende plattformspezifische Setup ist erforderlich.
Die folgenden Berechtigungen müssen der Platforms/Android/AndroidManifest.xml
-Datei hinzugefügt werden:
<uses-permission android:name="android.permission.CAMERA" />
Dies sollte innerhalb des <manifest>
-Elements hinzugefügt werden. Nachfolgend sehen Sie ein vollständiges Beispiel:
<?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>
Grundlegende Verwendung
CameraView
kann auf folgende Weise einer .NET MAUI-Anwendung hinzugefügt werden.
Einbinden des XAML-Namespace
Um das Toolkit in XAML verwenden zu können, muss der folgende xmlns
-Abschnitt zu Ihrer Seite oder Ansicht hinzugefügt werden:
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
Der folgende Abschnitt:
<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>
Würde dann geändert werden, um xmlns
einzubinden:
<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>
Das Ergebnis ist eine Oberfläche, die die Ausgabe der Standardkamera rendert, die mit dem Gerät verbunden ist.
Zugreifen auf die aktuelle Kamera
Die SelectedCamera
-Eigenschaft bietet die Möglichkeit, auf die aktuell ausgewählte Kamera zuzugreifen.
Das folgende Beispiel zeigt, wie Sie die SelectedCamera
-Eigenschaft von CameraView
an eine Eigenschaft des CameraViewModel
mit demselben Namen (SelectedCamera
) binden.
<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>
Steuerelementzoom
Die SelectedCamera
-Eigenschaft stellt sowohl eine MinimumZoomFactor
- als auch eine MaximumZoomFactor
-Eigenschaft bereit. Diese sind schreibgeschützt und bieten Entwickler*innen eine programmgesteuerte Möglichkeit, zu bestimmen, welche Zoomfunktion auf die aktuelle Kamera angewendet werden kann. Um den Zoom auf der aktuellen Kamera zu ändern, stellt CameraView
die ZoomFactor
-Eigenschaft bereit.
Hinweis
Wenn ein Wert außerhalb des MinimumZoomFactor
und MaximumZoomFactor
bereitgestellt wird, wird CameraView
den Wert einklammern, um ihn innerhalb der Grenzen zu halten.
Das folgende Beispiel zeigt, wie Sie der Anwendung einen Slider
hinzufügen und die folgenden Bindungen einrichten:
- Binden Sie die
Maximum
-Eigenschaft desSlider
an denMaximumZoomFactor
derSelectedCamera
-Eigenschaft. - Binden Sie die
Minimum
-Eigenschaft desSlider
an denMinimumZoomFactor
derSelectedCamera
-Eigenschaft. - Binden Sie die
Value
-Eigenschaft desSlider
an dieCurrentZoom
-Eigenschaft derCameraViewModel
-Klasse.
Die endgültige Änderung umfasst das Binden der ZoomFactor
-Eigenschaft von CameraView
an die CurrentZoom
-Eigenschaft der CameraViewModel
-Klasse.
<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>
Kamerablitzmodus
CameraView
bietet die Möglichkeit, den Blitzmodus auf dem Gerät programmgesteuert zu ändern. Die folgenden Optionen sind möglich:
Off
: der Blitz ist ausgeschaltet und wird nicht verwendet.On
: der Blitz ist eingeschaltet und wird immer verwendet.Auto
: der Blitz wird automatisch basierend auf den Beleuchtungsbedingungen verwendet.
Die SelectedCamera
-Eigenschaft stellt außerdem IsFlashSupported
bereit. So kann ermittelt werden, ob die aktuell ausgewählte Kamera über einen Blitz verfügt, der gesteuert werden kann.
Das folgende Beispiel zeigt, wie Sie der Anwendung einen Picker
hinzufügen und die folgenden Bindungen einrichten:
- Binden Sie die
IsVisible
-Eigenschaft desPicker
an denIsFlashSupported
derSelectedCamera
-Eigenschaft. - Binden Sie die
ItemsSource
-Eigenschaft desPicker
an dieFlashModes
-Eigenschaft derCameraViewModel
-Klasse – eine einfache Liste der möglichen Werte derCameraFlashMode
-Enumeration. - Binden Sie die
SelectedItem
-Eigenschaft desPicker
an dieFlashMode
-Eigenschaft derCameraViewModel
-Klasse.
Die endgültige Änderung umfasst das Binden der CameraFlashMode
-Eigenschaft von CameraView
an die FlashMode
-Eigenschaft der CameraViewModel
-Klasse.
<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
bietet die Möglichkeit, die Auflösung für Bilder, die von der aktuellen Kamera aufgenommen werden, programmgesteuert zu ändern.
Hinweis
Dadurch wird die in der Vorschau der Kamera angezeigte Auflösung nicht verändert.
Die SelectedCamera
-Eigenschaft stellt auch SupportedResolutions
bereit. So kann ermittelt werden, welche Auflösungen die aktuelle Kamera unterstützt.
Das folgende Beispiel zeigt, wie Sie der Anwendung einen Picker
hinzufügen und die folgenden Bindungen einrichten:
- Binden Sie die
ItemsSource
-Eigenschaft desPicker
an denSupportedResolutions
derSelectedCamera
-Eigenschaft. - Binden Sie die
SelectedItem
-Eigenschaft desPicker
an dieSelectedResolution
-Eigenschaft derCameraViewModel
-Klasse.
Die endgültige Änderung umfasst das Binden der ImageCaptureResolution
-Eigenschaft von CameraView
an die SelectedResolution
-Eigenschaft der CameraViewModel
-Klasse.
<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
Die CameraView
bietet die Möglichkeit, Bildaufnahmen programmgesteuert auszulösen. Dies ist sowohl über die CaptureImage
-Methode als auch mit CaptureImageCommand
möglich.
Das folgende Beispiel zeigt, wie Sie der Anwendung einen Button
hinzufügen und die folgenden Bindungen einrichten:
- Binden Sie die
Command
-Eigenschaft vonButton
an dieCaptureImageCommand
-Eigenschaft vonCameraView
.
<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>
Hinweis
Um das Bild zu verwenden, das erfasst wurde, stellt CameraView
das MediaCaptured
-Ereignis bereit.
Vorschau starten
CameraView
bietet die Möglichkeit, die Vorschau programmgesteuert über die Kamera zu starten. Dies ist sowohl über die StartCameraPreview
-Methode als auch mit StartCameraPreviewCommand
möglich.
Das folgende Beispiel zeigt, wie Sie der Anwendung einen Button
hinzufügen und die folgenden Bindungen einrichten:
- Binden Sie die
Command
-Eigenschaft vonButton
an dieStartCameraPreviewCommand
-Eigenschaft vonCameraView
.
<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>
Vorschau beenden
CameraView
bietet die Möglichkeit, die Vorschau programmgesteuert über die Kamera zu stoppen. Dies ist sowohl über die StopCameraPreview
-Methode als auch mit StopCameraPreviewCommand
möglich.
Das folgende Beispiel zeigt, wie Sie der Anwendung einen Button
hinzufügen und die folgenden Bindungen einrichten:
- Binden Sie die
Command
-Eigenschaft vonButton
an dieStopCameraPreviewCommand
-Eigenschaft vonCameraView
.
<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>
Beispiele
Sie finden ein Beispiel für dieses Feature in Aktion in der Beispielanwendung für das .NET MAUI Community Toolkit.
API
Sie finden den Quellcode für CameraView
über das GitHub-Repository für das .NET MAUI Community Toolkit.
.NET MAUI Community Toolkit