android - 在缩放加载之前,根据实际 Uri 预估 Bitmap 的大小

标签 android android-camera bitmapfactory

如果你有一个 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() );

太棒了并且是可行的解决方案。

请注意,在当前条件下(2014 年)使用典型相机尺寸等情况下,“四”因素往往效果很好。但是,最好猜测或准确了解图像数据的大小theUri,然后使用该信息,智能地选择该因素

简而言之,如何在加载 Uri 时正确选择比例因子

Android专家,这是一个众所周知的问题,有解决办法吗?感谢您的 iOS->Android friend ! :)

最佳答案

参见 Android 指南 handling large bitmaps .

特别是这个部分:

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

关于android - 在缩放加载之前,根据实际 Uri 预估 Bitmap 的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24135445/

相关文章:

android - 如何使用camerax前置摄像头保存正确的旋转图像?

java - Android:相机表面 View 模糊

java - 内部应用程序相机照片不正确地保存到图库

android - bitmap.compress(Bitmap.CompressFormat.PNG, 0, fOut) 使图像尺寸大于原始尺寸

java - Android - 获取加载的类/反射以获取包中的类?

android - Cordova 2.7项目无法编译

java - 为什么我不能在实用程序类(不是 Activity 的类)中使用 BitmapFactory.decodeResource() 方法?无法解析方法 getResources()

android - 将大位图加载到 ViewPager 中的 ImageView - 内存不足

java - 如何计算 map 跨度/缩放以在视口(viewport)中包含一组 GeoPoints?

android - 如何通过自定义按钮从已打开的前置摄像头捕获图像