XAML 当我在Xamarin Forms中的物理Android设备中拍照时,相机图片会左旋转

af7jpaap  于 2023-08-01  发布在  Android
关注(0)|答案(1)|浏览(124)

我正在编写真实的拍照的代码,并将其转换为字节数组。当我使用Android模拟器并拍照时,下面的代码工作得非常好。因此,当我通过模拟器拍照时,照片会以我拍摄的方式显示。但是当我将项目连接到我的物理Android设备时,当我拍照时,图片显示为向左旋转90度。这是我用来拍照的东西。

private async void ChangePic(object sender, EventArgs e)
        {
            string action = await DisplayActionSheet("Change Picture", "Cancel", null, "Take Photo", "Choose from Library");

            if (action == "Take Photo")
            {
                var options = new MediaPickerOptions
                {
                    Title = "Take Photo"
                };

                var photo = await MediaPicker.CapturePhotoAsync(options);

                if (photo != null)
                {
                    using (var stream = await photo.OpenReadAsync())
                    {
                        var memoryStream = new MemoryStream();
                        await stream.CopyToAsync(memoryStream);
                        profPicture = memoryStream.ToArray();
                    }

                    pictureImage.Source = ImageSource.FromStream(() => new MemoryStream(profPicture));
                }
            }
            else if (action == "Choose from Library")
            {
                ...
            }
        }

字符串
我将图片转换为字节数组并将其分配为pictureImage.Source = ImageSource.FromStream(() => new MemoryStream(profPicture));。在XAML代码中,我有一个名为pictureImage的图像,因此拍摄的照片将显示在那里。

<Image x:Name="pictureImage" Aspect="AspectFill" HeightRequest="100" WidthRequest="100" BackgroundColor="Black" Margin="0,20,0,10" HorizontalOptions="CenterAndExpand">
                <Image.Clip>
                    <EllipseGeometry Center="50,50" RadiusX="50" RadiusY="50"/>
                </Image.Clip>
                <Image.GestureRecognizers>
                    <TapGestureRecognizer Tapped="ChangePic" NumberOfTapsRequired="1"/>
                </Image.GestureRecognizers>
</Image>


拍摄照片在模拟器和物理设备中运行都没有问题。只是模拟器正确显示照片,但物理设备显示的照片左旋转90度。

jtoj6r0c

jtoj6r0c1#

我假设您在Xamarin.Essential中使用MediaPicker。在GitHub上有一个已知的问题:[Bug] MediaPicker CapturePhotoAsync - Orientation of photo rotated 90 degrees。使用MediaPicker捕获照片丢失了一些exif或其他元数据。从jfversluis的评论中,他给出了一些关于xamarin表单或maui的建议,似乎他们将无法再为Essentials修复这个问题。
然而,社区也分享了许多变通方法,例如使用SkiaSharp或实现自定义服务,您可以尝试并遵循此线程。

相关问题