CameraView
menyediakan CameraView
kemampuan untuk terhubung ke kamera, menampilkan pratinjau dari kamera dan mengambil foto. Ini CameraView
juga menawarkan fitur untuk mendukung pengambilan foto, mengontrol flash, menyimpan media yang diambil ke file, dan menawarkan kait yang berbeda untuk peristiwa.
Bagian berikut akan secara bertahap dibangun berdasarkan cara menggunakan CameraView
dalam aplikasi .NET MAUI. Mereka mengandalkan penggunaan CameraViewModel
. yang akan ditetapkan sebagai BindingContext
contoh CameraViewPage
.
Inisialisasi khusus platform
adalah CameraView
bagian CommunityToolkit.Maui.Camera
dari paket nuget. Untuk terlebih dahulu CameraView
menggunakan, silakan merujuk ke bagian Memulai . Penyiapan khusus platform berikut diperlukan.
Izin berikut perlu ditambahkan ke Platforms/Android/AndroidManifest.xml
file:
<uses-permission android:name="android.permission.CAMERA" />
Ini harus ditambahkan di <manifest>
dalam elemen . Di bawah ini menunjukkan contoh yang lebih lengkap:
<?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>
Penggunaan dasar
CameraView
dapat ditambahkan ke aplikasi .NET MAUI dengan cara berikut.
Menyertakan namespace XAML
Untuk menggunakan toolkit di XAML, hal berikut xmlns
perlu ditambahkan ke halaman atau tampilan Anda:
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
Oleh karena itu hal-hal berikut:
<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>
Akan dimodifikasi untuk menyertakan xmlns
sebagai berikut:
<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>
Hasilnya akan menjadi permukaan yang merender output kamera default yang terhubung ke perangkat.
Mengakses kamera saat ini
Properti SelectedCamera
ini menyediakan kemampuan untuk mengakses kamera yang saat ini dipilih.
Contoh berikut menunjukkan cara mengikat SelectedCamera
properti dari ke CameraView
properti pada CameraViewModel
dengan nama yang sama (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>
Perbesar Kontrol
Properti SelectedCamera
ini menyediakan MinimumZoomFactor
properti dan MaximumZoomFactor
, ini bersifat baca-saja dan memberi pengembang cara terprogram untuk menentukan zoom apa yang dapat diterapkan ke kamera saat ini. Untuk mengubah zoom pada kamera saat ini, CameraView
properti menyediakan ZoomFactor
.
Catatan
Jika nilai disediakan di luar MinimumZoomFactor
dan MaximumZoomFactor
CameraView
akan menjepit nilai untuk menyimpannya dalam batas.
Contoh berikut menunjukkan cara menambahkan Slider
ke dalam aplikasi dan menyiapkan pengikatan berikut:
- Ikat
Maximum
properti keSlider
MaximumZoomFactor
SelectedCamera
properti . - Ikat
Minimum
properti keSlider
MinimumZoomFactor
SelectedCamera
properti . - Ikat
Value
properti keSlider
CurrentZoom
properti diCameraViewModel
kelas .
Perubahan akhir melibatkan pengikatan ZoomFactor
properti ke CameraView
CurrentZoom
properti di CameraViewModel
kelas .
<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>
Mode Lampu Kilat Kamera
menyediakan CameraView
kemampuan untuk mengubah mode flash secara terprogram pada perangkat, opsi yang mungkin adalah:
Off
- lampu kilat mati dan tidak akan digunakan.On
- lampu kilat menyala dan akan selalu digunakan.Auto
- lampu kilat akan secara otomatis digunakan berdasarkan kondisi pencahayaan.
Properti SelectedCamera
ini juga menyediakan IsFlashSupported
yang memungkinkan untuk menentukan apakah kamera yang saat ini dipilih memiliki lampu kilat yang dapat dikontrol.
Contoh berikut menunjukkan cara menambahkan Picker
ke dalam aplikasi dan menyiapkan pengikatan berikut:
- Ikat
IsVisible
properti kePicker
IsFlashSupported
SelectedCamera
properti . - Ikat
ItemsSource
properti kePicker
FlashModes
properti diCameraViewModel
kelas - daftar sederhana dari kemungkinan nilaiCameraFlashMode
enum. - Ikat
SelectedItem
properti kePicker
FlashMode
properti diCameraViewModel
kelas .
Perubahan akhir melibatkan pengikatan CameraFlashMode
properti ke CameraView
FlashMode
properti di CameraViewModel
kelas .
<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
memberikan CameraView
kemampuan untuk mengubah resolusi secara terprogram untuk gambar yang diambil dari kamera saat ini.
Catatan
Ini tidak akan mengubah resolusi yang ditampilkan dalam pratinjau dari kamera.
Properti SelectedCamera
ini juga menyediakan SupportedResolutions
yang memungkinkan untuk menentukan resolusi mana yang didukung kamera saat ini.
Contoh berikut menunjukkan cara menambahkan Picker
ke dalam aplikasi dan menyiapkan pengikatan berikut:
- Ikat
ItemsSource
properti kePicker
SupportedResolutions
SelectedCamera
properti . - Ikat
SelectedItem
properti kePicker
SelectedResolution
properti diCameraViewModel
kelas .
Perubahan akhir melibatkan pengikatan ImageCaptureResolution
properti ke CameraView
SelectedResolution
properti di CameraViewModel
kelas .
<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
menyediakan CameraView
kemampuan untuk memicu pengambilan gambar secara terprogram. Ini dimungkinkan CaptureImage
CaptureImageCommand
melalui metode atau .
Contoh berikut menunjukkan cara menambahkan Button
ke dalam aplikasi dan menyiapkan pengikatan berikut:
- Ikat
Command
properti keButton
CaptureImageCommand
properti padaCameraView
.
<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>
Catatan
Untuk menggunakan gambar yang telah diambil, CameraView
berikan MediaCaptured
peristiwa.
Mulai pratinjau
menyediakan CameraView
kemampuan untuk memulai pratinjau secara terprogram dari kamera. Ini dimungkinkan StartCameraPreview
StartCameraPreviewCommand
melalui metode atau .
Contoh berikut menunjukkan cara menambahkan Button
ke dalam aplikasi dan menyiapkan pengikatan berikut:
- Ikat
Command
properti keButton
StartCameraPreviewCommand
properti padaCameraView
.
<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>
Hentikan pratinjau
menyediakan CameraView
kemampuan untuk menghentikan pratinjau secara terprogram dari kamera. Ini dimungkinkan StopCameraPreview
StopCameraPreviewCommand
melalui metode atau .
Contoh berikut menunjukkan cara menambahkan Button
ke dalam aplikasi dan menyiapkan pengikatan berikut:
- Ikat
Command
properti keButton
StopCameraPreviewCommand
properti padaCameraView
.
<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>
Contoh
Anda dapat menemukan contoh fitur ini dalam tindakan di Aplikasi Sampel Toolkit Komunitas .NET MAUI.
API
Anda dapat menemukan kode sumber untuk CameraView
lebih pada repositori GitHub .NET MAUI Community Toolkit.
.NET MAUI Community Toolkit