2016-09-22 19 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; 
}); 
}; 

はしかし、これはエラーメッセージを表示してアンドロイドに失敗します5312x2988、最大= 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

アンドロイドは、ディスプレイの解像度と密度に基づいてイメージのサイズを変更するビットマップを使用します。 サイズに合わせてサイズを縮小する必要があります。独自のビットマップファクトリを作成してそれを行うことができます。 また、ダウンサンプリングで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)
関連する問題