我正在编写真实的拍照的代码,并将其转换为字节数组。当我使用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度。
1条答案
按热度按时间jtoj6r0c1#
我假设您在Xamarin.Essential中使用MediaPicker。在GitHub上有一个已知的问题:[Bug] MediaPicker CapturePhotoAsync - Orientation of photo rotated 90 degrees。使用MediaPicker捕获照片丢失了一些exif或其他元数据。从jfversluis的评论中,他给出了一些关于xamarin表单或maui的建议,似乎他们将无法再为Essentials修复这个问题。
然而,社区也分享了许多变通方法,例如使用SkiaSharp或实现自定义服务,您可以尝试并遵循此线程。