【问题标题】:Pre-guess size of Bitmap from the actual Uri, before scale-loading在缩放加载之前,根据实际 Uri 预先猜测位图的大小
【发布时间】:2014-07-30 21:19:37
【问题描述】:

如果你有 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 朋友! :)

【问题讨论】:

    标签: android android-camera bitmapfactory


    【解决方案1】:

    请参阅handling large bitmaps 的 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多