Mostrando entradas con la etiqueta images. Mostrar todas las entradas
Mostrando entradas con la etiqueta images. Mostrar todas las entradas

jueves, 31 de octubre de 2013

Adjust image size to avoid memory issues with images so big

this is the code for decoding images inside a rectangle:


        private 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;
 }
 
 private Bitmap decodeBitmapFromResource(byte[] data,
         int reqWidth, int reqHeight) {

     // First decode with inJustDecodeBounds=true to check dimensions
     final BitmapFactory.Options options = new BitmapFactory.Options();
     options.inJustDecodeBounds = true;
     
     BitmapFactory.decodeByteArray(data, 0, data.length,options);

     // Calculate inSampleSize
     options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
     

     // Decode bitmap with inSampleSize set
     options.inJustDecodeBounds = false;
     
     return BitmapFactory.decodeByteArray(data, 0, data.length,options);
     
 }


Then you can use it in this way:


byte[] data = getImageFromUrl(url);
    
if(data!=null){
    bitmap = decodeBitmapFromResource(data, image_size, image_size);
}