2016-09-22 31 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)
相關問題