如何解决内存中的高分辨率图像?

时间:2017-07-31 08:47:39

标签: android memory-leaks

  1. 以下是使用FileProvider保存图像文件时用于读取图像文件的代码:

    public static Bitmap readBitmapFromIntentReturn(Context context, Intent intentReturn, Uri uri) {
                    try {
                        AssetFileDescriptor fileDescriptor = null;
                        fileDescriptor = context.getContentResolver().openAssetFileDescriptor(uri, "r");
    
                        BitmapFactory.Options options = new BitmapFactory.Options();
                        options.inJustDecodeBounds = true;
                        BitmapFactory.decodeFileDescriptor(fileDescriptor.getFileDescriptor(), null, options);
    
                        options.inSampleSize = SystemFunctions.calculateInSampleSize(options);
    
                        options.inJustDecodeBounds = false;
                        Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fileDescriptor.getFileDescriptor(), null, options);
                        return bitmap;
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                return null;
            }
    
  2. 2。方法用于在我上传图像之前调整图像大小,不确定大小是否正确调整大小:

        public static int calculateInSampleSize(BitmapFactory.Options options) {
                    final int reqHeight = 360;
                    final int reqWidth = 360;
    
                    final int height = options.outHeight;
                    final int width = options.outWidth;
                    int inSampleSize = 1;
    
                    if (height > reqHeight || width > reqWidth) {
    
                        final int halfHeight = height / 2;
                        final int halfWidth = width / 2;
    
                        while ((halfHeight / inSampleSize) > reqHeight
                                && (halfWidth / inSampleSize) > reqWidth) {
                            inSampleSize *= 2;
                        }
                    }
    
                    Log.d("TestSampleSize", "TestSampleSize : " + String.valueOf(inSampleSize));
                    return inSampleSize;
                }
    

0 个答案:

没有答案
相关问题