Android : Maximum allowed width & height of bitmap

前端 未结 5 1944
广开言路
广开言路 2020-11-27 04:37

Im creating an app that needs to decode large images to bitmaps to be displayed in a ImageView.

If i just try to decode them straight to a bitmap i get the following

5条回答
  •  我在风中等你
    2020-11-27 05:09

    this will decode and scale image before loaded into memory,just change landscape and portrait to the size you actually want

    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeFile(path, options);
    int imageHeight = options.outHeight;
    int imageWidth = options.outWidth;
    String imageType = options.outMimeType;
    if(imageWidth > imageHeight) {
        options.inSampleSize = calculateInSampleSize(options,512,256);//if landscape
    } else{
        options.inSampleSize = calculateInSampleSize(options,256,512);//if portrait
    }
    options.inJustDecodeBounds = false;
    bitmap = BitmapFactory.decodeFile(path,options);
    

    method for calculating size

    public static int calculateInSampleSize(
            BitmapFactory.Options options, int reqWidth, int reqHeight) {
       // Raw height and width of image
       final int height = options.outHeight;
       final int width = options.outWidth;
       int inSampleSize = 1;
    
       if (height > reqHeight || width > reqWidth) {
    
          // Calculate ratios of height and width to requested height and width
          final int heightRatio = Math.round((float) height / (float) reqHeight);
          final int widthRatio = Math.round((float) width / (float) reqWidth);
    
          // Choose the smallest ratio as inSampleSize value, this will guarantee
          // a final image with both dimensions larger than or equal to the
          // requested height and width.
          inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
       }
    
       return inSampleSize;
    }
    

提交回复
热议问题