Monodroid BitmapFactory.DecodeFileDescriptor Bitmap始终为null

时间:2013-01-07 09:53:26

标签: c# java android xamarin.android

我使用以下方法来防止outofmemory异常,但Bitmap始终为null。有人有想法吗?

public Bitmap readBitmap(Android.Net.Uri selectedImage) {

        Bitmap bm = null;
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.InSampleSize = 9;
        AssetFileDescriptor fileDescriptor = null;
        try {
            fileDescriptor =  this.ContentResolver.OpenAssetFileDescriptor(selectedImage,"r");
        } catch (FileNotFoundException e) {
            Toast.MakeText(this, e.Message, ToastLength.Long);
        }
        finally{
            try {
                bm =  BitmapFactory.DecodeFileDescriptor(fileDescriptor.FileDescriptor, null, options);
                fileDescriptor.Close();
            } catch (IOException) {
            }
        }
        return bm;
}

4 个答案:

答案 0 :(得分:1)

是。这是谷歌的另一个错误。解决方案是这样做:

bm =  BitmapFactory.decodeStream(new FileInputStream(fileDescriptor));

而不是

bm =  BitmapFactory.DecodeFileDescriptor(fileDescriptor.FileDescriptor, null, options);

答案 1 :(得分:0)

如果bm为null,

BitmapFactory.DecodeFileDescriptor必须抛出异常。

答案 2 :(得分:0)

在你的捕获中,尝试像这样修改

} catch (IOException e) {
   Log.v ("Message", ""+e.message);
        }

所以你可以看到它返回null的错误

答案 3 :(得分:0)

也许Uri不正确并且FileNotFoundException被抛出。但是您无法看到这一点,因为您在catch子句中缺少Toast的show()方法。

应该是这样的:

 Toast.MakeText(this, e.Message, ToastLength.Long).show();