在缩放前,从实际的Uri中预先猜测位图的大小

如果你有一个Uri,你需要Bitmap ,你可以理论上这样做

 Bitmap troublinglyLargeBmp = MediaStore.Images.Media.getBitmap( State.mainActivity.getContentResolver(), theUri ); 

但每次都会崩溃,

所以你这样做………

 BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 4; AssetFileDescriptor fileDescriptor =null; fileDescriptor = State.mainActivity.getContentResolver().openAssetFileDescriptor( theUri, "r"); Bitmap actuallyUsableBitmap = BitmapFactory.decodeFileDescriptor( fileDescriptor.getFileDescriptor(), null, options); Utils.Log("'4-sample' method bitmap ... " +actuallyUsableBitmap.getWidth() +" " +actuallyUsableBitmap.getHeight() ); 

这是太棒了 ,是工作的解决scheme。

注意在当前条件下(2014年),具有典型的相机尺寸的情况下趋于正常工作的“四”因子等。但是,最好是在URI中准确猜测或学习图像数据的大小 ,然后使用信息, 智能地select这个因素

总之, 如何正确select这个比例因子当你加载一个Uri?

Android专家,这是一个众所周知的问题,有没有解决scheme? 感谢你的iOS-> Android的朋友! 🙂

请参阅Android指南以处理大型位图 。

具体这个部分:

 BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true; BitmapFactory.decodeResource(getResources(), R.id.myimage, options); int imageHeight = options.outHeight; int imageWidth = options.outWidth; String imageType = options.outMimeType; 

编辑

在你的情况,你会取代decodeResource行:

 BitmapFactory.decodeFileDescriptor(fileDescriptor.getFileDescriptor(), null, options);