0

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)
4

1 に答える 1

0

解決しました。BitmapFactory.DecodeFile(String path, BitmapFactory.Options opts)代わりに使用してください!

于 2013-03-26T08:10:44.487 に答える