XAML “错误信息:CAMERA_ERROR(3):相机设备遇到严重错误,”来自Xamarin的错误消息,表单

bq3bfh9z  于 2023-05-27  发布在  其他
关注(0)|答案(1)|浏览(392)

我正在编写一个跨平台应用程序,并试图创建一个相机预览页面,用户可以看到实时相机视图。我正在使用Xamarin Community Toolkit CameraView,遇到了一个问题。这是我的XAML文件的代码。

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:xct="http://xamarin.com/schemas/2020/toolkit"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Test.CameraPreview"
             
             NavigationPage.HasBackButton="True"
             NavigationPage.HasNavigationBar="False">
    <ContentPage.Content>
        <Grid x:Name="cameraGrid">
            <xct:CameraView x:Name="xctCameraView"
                            CaptureMode="Photo"
                            MediaCaptured="MediaCaptured"
                            HorizontalOptions="FillAndExpand"
                            VerticalOptions="FillAndExpand"/>
            <StackLayout VerticalOptions="EndAndExpand">
                <StackLayout Orientation="Horizontal" HorizontalOptions="CenterAndExpand" BackgroundColor="Transparent">
                    <Frame CornerRadius="15" x:Name="videoFrame" WidthRequest="48" Padding="7">
                        <Label Text="Video" HorizontalOptions="CenterAndExpand" x:Name="videoLabel" BackgroundColor="Transparent"/>
                    </Frame>
                    <Frame CornerRadius="15" x:Name="pictureFrame" WidthRequest="48" Padding="7">
                        <Label Text="Picture" HorizontalOptions="CenterAndExpand" x:Name="pictureLabel" BackgroundColor="Transparent"/>
                    </Frame>
                </StackLayout>
                <ImageButton Clicked="CapturePhoto" HeightRequest="120" WidthRequest="120"
                             HorizontalOptions="Center" x:Name="captureBtn" BackgroundColor="Transparent"/>
            </StackLayout>
        </Grid>
    </ContentPage.Content>
</ContentPage>

这是CameraPreview类的C#代码,它负责拍摄照片并将照片转换为字节并将其发送到另一个页面:

private void CapturePhoto(object sender, EventArgs e)
        {
            if (isPictureSelected)
            {
                if (xctCameraView != null)
                {
                    Debug.WriteLine($"xctCameraView is not null");
                    xctCameraView.Shutter();
                    Debug.WriteLine($"camera picture taken");
                }
                else
                {
                    DisplayAlert("Error", "Camera view is not available.", "OK");
                }
            }
        }
    private void MediaCaptured(object sender, MediaCapturedEventArgs e)
        {
            switch (xctCameraView.CaptureMode)
            {
                default:
                case CameraCaptureMode.Default:

                case CameraCaptureMode.Photo:
                    Debug.WriteLine($"media captured is passed");
                    if (e.Image != null)
                    {
                        Debug.WriteLine($"e.Image is not null");
                        var imageSource = (StreamImageSource)e.Image;
                        using (var stream = imageSource.Stream(CancellationToken.None).Result)
                        {
                            using (var memoryStream = new MemoryStream())
                            {
                                Debug.WriteLine($"var memoryStream = new MemoryStream() went through");
                                stream.CopyTo(memoryStream);
                                photoData = memoryStream.ToArray();
                                // Use the byte array 'photoData' as needed
                                Debug.WriteLine($"navigating to EditPostPage");
                                Device.BeginInvokeOnMainThread(() =>
                                {
                                    Navigation.PushAsync(new EditPostPage(userId, textId, photoData));
                                });
                            }
                        }
                    }

                    break;

                case CameraCaptureMode.Video:
                    break;
            }
        }

问题是,当我拍照时,它工作正常,因为Debug.WriteLine($"camera picture taken");显示在输出中。但是,不知何故,MediaCaptured(object sender, MediaCapturedEventArgs e)没有通过,因为输出中没有显示任何调试语句。相反,在拍摄图片后,出现错误消息“[0:] CameraView:错误摄像头访问”和“错误消息:CAMERA_ERROR(3):摄像头设备遇到严重错误。“什么问题?我试图重新启动应用程序,模拟器,并将其更改为不同的设备,但错误消息一直显示在调试输出中。

kpbwa7wx

kpbwa7wx1#

如果在开发计算机上使用网络摄像头来模拟模拟设备上的后置摄像头,则必须将此值设置为webcamn,其中n选择网络摄像头(如果只有一个网络摄像头,请选择webcam 0)。如果设置为模拟,则模拟器将在软件中模拟摄像机。要禁用后置摄像头,请将此值设置为none。如果启用了后置摄像头,请确保同时启用hw.camera。
您可以尝试以下方法:
点击工具-> Android -> Android设备管理器。然后编辑Android模拟器,将hw.camera.backhw.camera.front设置为emulated
有关更多信息,请参阅Editing Android Virtual Device Properties

相关问题