我在我的Xamarin表单应用中使用了优秀的Xam.Plugin.Media nuget包来允许用户拍照。我已经关注了Xam.Plugin.Media github页面中的示例代码:
takePhoto.Clicked += async (sender, args) =>
{
await CrossMedia.Current.Initialize();
if (!CrossMedia.Current.IsCameraAvailable || !CrossMedia.Current.IsTakePhotoSupported)
{
DisplayAlert("No Camera", ":( No camera available.", "OK");
return;
}
var file = await CrossMedia.Current.TakePhotoAsync(new Plugin.Media.Abstractions.StoreCameraMediaOptions
{
Directory = "Sample",
Name = "test.jpg"
});
if (file == null)
return;
await DisplayAlert("File Location", file.Path, "OK");
image.Source = ImageSource.FromStream(() =>
{
var stream = file.GetStream();
file.Dispose();
return stream;
});
};
然而,这在Android上失败并显示错误消息:
位图太大而无法上传到纹理中(5312x2988,max = 4096x4096)
这有什么办法吗?理想情况下使用PCL位图库
答案 0 :(得分:1)
android使用位图根据显示分辨率和密度调整图像大小。 您必须将其缩小到您想要的大小。您可以编写自己的位图工厂来执行此操作。 或者您可以使用FFImageLoading进行下采样。 或者使用图像变换并实际上完全调整图像大小。
<ffimageloading:CachedImage HorizontalOptions="Center" VerticalOptions="Center"
WidthRequest="300" HeightRequest="300"
DownsampleToViewSize="true"
Source = "http://loremflickr.com/600/600/nature?filename=simple.jpg" />
参考文献: