摄像头视图

CameraView提供连接到相机、显示相机预览、拍摄照片和录制视频的功能。 它还提供功能来支持控制闪光灯和手电筒、调整缩放、将捕获的媒体保存到文件中,并提供不同的事件触发器。

以下部分将逐步介绍如何在 .NET MAUI 应用程序中使用 CameraView。 它们依赖于对 CameraViewModel 的使用。 将设置为示例 BindingContextCameraViewPage

特定于平台的初始化

CameraViewCommunityToolkit.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 属性提供 MinimumZoomFactorMaximumZoomFactor 属性,这些属性是只读的,并且为开发人员提供了编程方式,来确定可应用于当前相机的缩放。 为了更改当前相机上的缩放,CameraView 提供了 ZoomFactor 属性。

注意

如果值在 MinimumZoomFactorMaximumZoomFactor 之外提供,则 CameraView 将固定值以将其保留在边界内。

以下示例演示如何将 Slider 添加到应用程序中并设置以下绑定:

  • MaximumSlider 属性绑定到 MaximumZoomFactor 属性的 SelectedCamera
  • MinimumSlider 属性绑定到 MinimumZoomFactor 属性的 SelectedCamera
  • ValueSlider 属性绑定到 CurrentZoom 类上的 CameraViewModel 属性。

最终更改涉及将 ZoomFactorCameraView 属性绑定到 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 添加到应用程序中并设置以下绑定:

  • IsVisiblePicker 属性绑定到 IsFlashSupported 属性的 SelectedCamera
  • ItemsSourcePicker 属性绑定到 FlashModes 类上的 CameraViewModel 属性 - CameraFlashMode 枚举的可能值的简单列表。
  • SelectedItemPicker 属性绑定到 FlashMode 类上的 CameraViewModel 属性。

最终更改涉及将 CameraFlashModeCameraView 属性绑定到 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 添加到应用程序中并设置以下绑定:

  • ItemsSourcePicker 属性绑定到 SupportedResolutions 属性的 SelectedCamera
  • SelectedItemPicker 属性绑定到 SelectedResolution 类上的 CameraViewModel 属性。

最终更改涉及将 ImageCaptureResolutionCameraView 属性绑定到 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 提供以编程方式触发图像捕获的功能。 这可以通过 CaptureImageCaptureImageCommand 方法实现。

以下示例演示如何将 Button 添加到应用程序中并设置以下绑定:

  • CommandButton 属性绑定到 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。 这可以通过 StartVideoRecordingStartVideoRecordingCommand 方法实现。

以下示例演示如何将 Button 添加到应用程序中并设置以下绑定:

  • CommandButton 属性绑定到 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 提供从相机以编程方式启动预览的功能。 这可以通过 StartCameraPreviewStartCameraPreviewCommand 方法实现。

以下示例演示如何将 Button 添加到应用程序中并设置以下绑定:

  • CommandButton 属性绑定到 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 提供通过编程停止相机预览的功能。 这可以通过 StopCameraPreviewStopCameraPreviewCommand 方法实现。

以下示例演示如何将 Button 添加到应用程序中并设置以下绑定:

  • CommandButton 属性绑定到 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 获取或设置相机缩放系数。 该值自动限制在所选相机的 MinimumZoomFactorMaximumZoomFactor 之间。 这是一种可绑定属性。 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 设备上的相机的物理位置(FrontRearUnknown)。
SupportedResolutions IReadOnlyList<Size> 相机支持的图像捕获分辨率列表。

相机闪光模式

CameraFlashMode枚举定义可用的闪存模式。

价值 说明
Off 闪存已关闭,不会使用。
On 闪光灯已开启,并且将始终开启使用。
Auto 根据照明条件自动使用闪光灯。

相机位置

CameraPosition枚举定义设备上相机的可能物理位置。

价值 说明
Unknown 相机位置未知。
Front 相机位于设备前面(面向用户)。
Rear 相机位于设备的后部(背向用户)。

示例

可以在 .NET MAUI 社区工具包示例应用程序中找到此功能的示例。

API

可以在 .NET MAUI Community Toolkit 的 GitHub 仓库中找到CameraView的源代码。