该CameraView提供连接到相机、显示相机预览、拍摄照片和录制视频的功能。 它还提供功能来支持控制闪光灯和手电筒、调整缩放、将捕获的媒体保存到文件中,并提供不同的事件触发器。
以下部分将逐步介绍如何在 .NET MAUI 应用程序中使用 CameraView。 它们依赖于对 CameraViewModel 的使用。 将设置为示例 BindingContext 的 CameraViewPage。
特定于平台的初始化
CameraView 是 CommunityToolkit.Maui.Camera NuGet 包的一部分。 若要首先使用 CameraView,请参阅“入门”部分。 需要以下平台特定的设置。
需要将以下权限添加到 Platforms/Android/AndroidManifest.xml 文件:
<uses-permission android:name="android.permission.CAMERA" />
如果计划录制视频,请请求麦克风权限:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
这应添加到 <manifest> 元素内。 下面显示了一个更完整的示例:
<?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>
基本用法
可以通过以下方式将 CameraView 添加到 .NET MAUI 应用程序。
请求权限
开发人员必须手动请求摄像头权限和/或麦克风权限。
var cameraPermissionsRequest = await Permissions.RequestAsync<Permissions.Camera>();
如果计划录制视频,请请求麦克风权限:
var microphonePermissionsRequest = await Permissions.RequestAsync<Permissions.Microphone>();
包括 XAML 命名空间
若要在 XAML 中使用工具包,需要将以下 xmlns 添加到页面或视图中:
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
因此,以下内容:
<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>
将被修改为包括 xmlns,如下所示:
<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>
结果将是一个表面,用来呈现连接到设备的默认相机的输出。
访问当前相机
该 SelectedCamera 属性会提供访问当前所选相机的功能。
以下示例演示如何将 SelectedCamera 属性从 CameraView 绑定到 CameraViewModel 上具有同名 (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>
控制缩放
该 SelectedCamera 属性提供 MinimumZoomFactor 和 MaximumZoomFactor 属性,这些属性是只读的,并且为开发人员提供了编程方式,来确定可应用于当前相机的缩放。 为了更改当前相机上的缩放,CameraView 提供了 ZoomFactor 属性。
注意
如果值在 MinimumZoomFactor 和 MaximumZoomFactor 之外提供,则 CameraView 将固定值以将其保留在边界内。
以下示例演示如何将 Slider 添加到应用程序中并设置以下绑定:
- 将
Maximum的Slider属性绑定到MaximumZoomFactor属性的SelectedCamera。 - 将
Minimum的Slider属性绑定到MinimumZoomFactor属性的SelectedCamera。 - 将
Value的Slider属性绑定到CurrentZoom类上的CameraViewModel属性。
最终更改涉及将 ZoomFactor 的 CameraView 属性绑定到 CurrentZoom 类上的 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>
相机闪光灯模式
CameraView 提供以编程方式更改设备上的闪光灯模式的功能,可能的选项包括:
-
Off- 闪光灯已关闭,并且不会被使用。 -
On- 闪光灯已打开,并且将始终使用。 -
Auto- 根据照明条件自动使用闪光灯。
SelectedCamera 属性还提供 IsFlashSupported,以便确定当前所选相机是否具有可以控制的闪光灯。
以下示例演示如何将 Picker 添加到应用程序中并设置以下绑定:
- 将
IsVisible的Picker属性绑定到IsFlashSupported属性的SelectedCamera。 - 将
ItemsSource的Picker属性绑定到FlashModes类上的CameraViewModel属性 -CameraFlashMode枚举的可能值的简单列表。 - 将
SelectedItem的Picker属性绑定到FlashMode类上的CameraViewModel属性。
最终更改涉及将 CameraFlashMode 的 CameraView 属性绑定到 FlashMode 类上的 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>
图像捕获分辨率
CameraView 提供了以编程方式更改从当前相机捕获的图像分辨率的功能。
注意
这不会更改相机预览中显示的分辨率。
SelectedCamera 属性还提供 SupportedResolutions,以便确定当前相机支持的分辨率。
以下示例演示如何将 Picker 添加到应用程序中并设置以下绑定:
- 将
ItemsSource的Picker属性绑定到SupportedResolutions属性的SelectedCamera。 - 将
SelectedItem的Picker属性绑定到SelectedResolution类上的CameraViewModel属性。
最终更改涉及将 ImageCaptureResolution 的 CameraView 属性绑定到 SelectedResolution 类上的 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
CameraView 提供以编程方式触发图像捕获的功能。 这可以通过 CaptureImage 或 CaptureImageCommand 方法实现。
以下示例演示如何将 Button 添加到应用程序中并设置以下绑定:
- 将
Command的Button属性绑定到CaptureImageCommand上的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>
注意
为了使用已捕获的图像,CameraView 会提供 MediaCaptured 事件。
以下示例演示如何使用 CaptureImage 该方法:
注意
下面的 C# 代码使用 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);
}
}
视频录制
提供录制视频功能的是 CameraView。 这可以通过 StartVideoRecording 或 StartVideoRecordingCommand 方法实现。
以下示例演示如何将 Button 添加到应用程序中并设置以下绑定:
- 将
Command的Button属性绑定到StartVideoRecordingCommand上的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>
注意
为了录制视频,必须提供清晰的数据流。
以下示例演示如何使用 StartVideoRecording 该方法:
注意
下面的 C# 代码使用 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);
}
如果您想录制短视频,并在 MemoryStream 中录制视频,您可以使用 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);
}
开始预览
CameraView 提供从相机以编程方式启动预览的功能。 这可以通过 StartCameraPreview 或 StartCameraPreviewCommand 方法实现。
以下示例演示如何将 Button 添加到应用程序中并设置以下绑定:
- 将
Command的Button属性绑定到StartCameraPreviewCommand上的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>
以下示例演示如何使用 StartCameraPreview 该方法:
注意
下面的 C# 代码使用 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);
}
}
停止预览
CameraView 提供通过编程停止相机预览的功能。 这可以通过 StopCameraPreview 或 StopCameraPreviewCommand 方法实现。
以下示例演示如何将 Button 添加到应用程序中并设置以下绑定:
- 将
Command的Button属性绑定到StopCameraPreviewCommand上的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>
以下示例演示如何使用 StopCameraPreview 该方法:
注意
下面的 C# 代码使用 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);
}
}
属性
| 财产 | 类型 | 说明 | 默认值 |
|---|---|---|---|
CameraFlashMode |
CameraFlashMode |
获取或设置相机的闪光灯模式。 这是一种可绑定属性。 | CameraFlashMode.Off |
ImageCaptureResolution |
Size |
获取或设置图像捕获的分辨率。 不会影响预览分辨率。 这是一种可绑定属性。 | Size.Zero |
IsAvailable |
bool |
获取设备上相机是否可用的状态。 这是一种只读可绑定属性。 | false |
IsBusy |
bool |
获取相机当前的繁忙状态(例如捕捉图像或录制)。 这是一种只读可绑定属性。 | false |
IsTorchOn |
bool |
获取或设置是否打开摄像机闪光灯(手电筒)。 这是一种可绑定属性。 | false |
SelectedCamera |
CameraInfo? |
获取或设置当前选定的相机设备。 这是具有双向绑定的可绑定属性。 | null |
ZoomFactor |
float |
获取或设置相机缩放系数。 该值自动限制在所选相机的 MinimumZoomFactor 和 MaximumZoomFactor 之间。 这是一种可绑定属性。 |
1f |
指令
| 命令 | 命令参数 | 说明 |
|---|---|---|
CaptureImageCommand |
— | 触发图像捕获。 捕获的图像通过 MediaCaptured 事件返回。 |
StartCameraPreviewCommand |
— | 启动相机预览显示。 |
StartVideoRecordingCommand |
Stream(可选) |
开始视频录制。 可选择传递Stream以进行记录。 |
StopCameraPreviewCommand |
— | 停止相机预览显示。 |
StopVideoRecordingCommand |
— | 停止视频录制并返回录制的流。 |
事件
| 事件 | 类型 | 说明 |
|---|---|---|
MediaCaptured |
EventHandler<MediaCapturedEventArgs> |
成功捕获图像时引发。 包含捕获图像数据的 Media 属性的 MediaCapturedEventArgs 类型为 Stream。 |
MediaCaptureFailed |
EventHandler<MediaCaptureFailedEventArgs> |
映像捕获失败时引发。
MediaCaptureFailedEventArgs包含一个带有错误消息的FailureReason属性。 |
方法
| 方法 | 返回类型 | 说明 |
|---|---|---|
CaptureImage(CancellationToken) |
Task |
从相机捕获单个图像。 结果通过 MediaCaptured 事件传递。 |
GetAvailableCameras(CancellationToken) |
ValueTask<IReadOnlyList<CameraInfo>> |
检索设备上的可用相机设备列表。 |
StartCameraPreview(CancellationToken) |
Task |
开始显示相机预览。 |
StartVideoRecording(CancellationToken) |
Task |
开始将视频录制到内部 MemoryStream。 |
StartVideoRecording(Stream, CancellationToken) |
Task |
开始将视频录制到指定的Stream。 |
StopCameraPreview() |
void |
停止显示相机预览。 |
StopVideoRecording(CancellationToken) |
Task<Stream> |
停止视频录制并返回已录制的 Stream。 |
CameraInfo
该 CameraInfo 类表示有关系统上可用的相机设备的信息。
| 财产 | 类型 | 说明 |
|---|---|---|
DeviceId |
string |
相机设备的唯一标识符。 |
IsFlashSupported |
bool |
相机是否支持闪存。 |
MaximumZoomFactor |
float |
支持的最大缩放因子。 |
MinimumZoomFactor |
float |
支持的最小缩放因子。 |
Name |
string |
相机设备的名称。 |
Position |
CameraPosition |
设备上的相机的物理位置(FrontRear或Unknown)。 |
SupportedResolutions |
IReadOnlyList<Size> |
相机支持的图像捕获分辨率列表。 |
相机闪光模式
CameraFlashMode枚举定义可用的闪存模式。
| 价值 | 说明 |
|---|---|
Off |
闪存已关闭,不会使用。 |
On |
闪光灯已开启,并且将始终开启使用。 |
Auto |
根据照明条件自动使用闪光灯。 |
相机位置
CameraPosition枚举定义设备上相机的可能物理位置。
| 价值 | 说明 |
|---|---|
Unknown |
相机位置未知。 |
Front |
相机位于设备前面(面向用户)。 |
Rear |
相机位于设备的后部(背向用户)。 |
示例
可以在 .NET MAUI 社区工具包示例应用程序中找到此功能的示例。
API
可以在 .NET MAUI Community Toolkit 的 GitHub 仓库中找到CameraView的源代码。