2016-09-22 86 views
0

我在Xamarin表单应用程序中使用了优秀的Xam.Plugin.Media nuget包,以允许用户拍照。我按照从Xam.Plugin.Media GitHub的页面示例代码:Xam.Media.Plugin位图太大而无法上传到纹理中

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

插件的测试版本允许你指定大小和压缩˚F演员为图像 – Jason

+0

@Jason我将PhotoSize设置为Plugin.Media.Abstractions.PhotoSize.Small和CompressionQuality为92,我得到相同的错误信息。有任何想法吗? – jonesne

+0

您可以使用https://github.com/luberda-molinet/FFImageLoading作为图像视图。它具有DonwsampleToSize属性,它将缩减您的图像以匹配您的图像视图,它将消除此错误 – Greensy

回答

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" /> 

参考文献:

  1. Xamarin.Forms API
  2. Downsampling properties
  3. GetImageAsJpgAsync(int quality = 90, int desiredWidth = 0, int desiredHeight = 0)
  4. GetImageAsPngAsync(int desiredWidth = 0, int desiredHeight = 0)