diff --git a/samples/training/bitmapfun/libs/android-support-v4.jar b/samples/training/bitmapfun/libs/android-support-v4.jar index feaf44f80..6080877d4 100644 Binary files a/samples/training/bitmapfun/libs/android-support-v4.jar and b/samples/training/bitmapfun/libs/android-support-v4.jar differ diff --git a/samples/training/bitmapfun/src/com/example/android/bitmapfun/util/ImageResizer.java b/samples/training/bitmapfun/src/com/example/android/bitmapfun/util/ImageResizer.java index f533231c2..6a129c318 100644 --- a/samples/training/bitmapfun/src/com/example/android/bitmapfun/util/ImageResizer.java +++ b/samples/training/bitmapfun/src/com/example/android/bitmapfun/util/ImageResizer.java @@ -196,23 +196,24 @@ public class ImageResizer extends ImageWorker { int inSampleSize = 1; if (height > reqHeight || width > reqWidth) { - if (width > height) { - inSampleSize = Math.round((float) height / (float) reqHeight); - } else { - inSampleSize = Math.round((float) width / (float) 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; // This offers some additional logic in case the image has a strange // aspect ratio. For example, a panorama may have a much larger // width than height. In these cases the total pixels might still // end up being too large to fit comfortably in memory, so we should - // be more aggressive with sample down the image (=larger - // inSampleSize). + // be more aggressive with sample down the image (=larger inSampleSize). final float totalPixels = width * height; - // Anything more than 2x the requested pixels we'll sample down - // further. + // Anything more than 2x the requested pixels we'll sample down further final float totalReqPixelsCap = reqWidth * reqHeight * 2; while (totalPixels / (inSampleSize * inSampleSize) > totalReqPixelsCap) {