Xamarin.AndroidアプリのGridViewのsdストレージからいくつかの画像を表示しようとしています。
私が見つけた唯一のドキュメントはこれです:http://docs.xamarin.com/recipes/android/data/files/selecting_a_gallery_image
ただし、1つの画像に対してのみ機能し、2つ以上の画像を開くとJava.Lang.OutOfMemoryError
この行:
imageView.SetImageURI (bitmapList [position]);
SOでAndroidの回答をいくつか見つけました:
https://stackoverflow.com/a/823966/511299
C#に変換:
public static Bitmap DecodeFile (String s)
{
try
{
s = s.Replace ("file://", "");
//Decode image size
BitmapFactory.Options o = new BitmapFactory.Options ();
o.InJustDecodeBounds = true;
BitmapFactory.DecodeStream (new System.IO.FileStream (s, System.IO.FileMode.Open), null, o);
//The new size we want to scale to
int REQUIRED_SIZE = 70;
//Find the correct scale value. It should be the power of 2.
int scale = 1;
while (o.OutWidth/scale/2>=REQUIRED_SIZE && o.OutHeight/scale/2>=REQUIRED_SIZE)
{
scale *= 2;
}
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options ();
o2.InSampleSize = scale;
return BitmapFactory.DecodeStream (new System.IO.FileStream (s, System.IO.FileMode.Open), null, o2);
}
catch (FileNotFoundException e)
{
}
return null;
}
これは私に
System.IO.IOException: Sharing violation on path storage/sdcard0/Pictures/MyAppPhotos/44cdbcf0-a488-40b8-98a9-79f3dc8d9deb.jpg
のライン上
return BitmapFactory.DecodeStream (new System.IO.FileStream (s, System.IO.FileMode.Open), null, o2);
ファイルに2回アクセスすることは可能ですか?
それとも、FileStream
の代わりに使用しているからかもしれませんFileInputStream
。文字列を必要とする例とは対照的に、使用しようとするBitmapFactory.DecodeStream
と、System.IO.Stream
パラメータとしてが必要になります:(
より詳細には、Android版は次のdecodeStream
とおりです。
public static Bitmap decodeStream (InputStream is, Rect outPadding, BitmapFactory.Options opts)
Xamarin.Androidで見つけることができるのはこれだけです。
public static Bitmap DecodeStream (System.IO.Stream is, Rect outPadding, BitmapFactory.Options opts)