Created
January 8, 2019 02:11
-
-
Save tuchangwei/75d935d164ee211e45d7b5800fcc46fc to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fun calculateInSampleSize(options: BitmapFactory.Options, reqWidth: Int, reqHeight: Int): Int { | |
// Raw height and width of image | |
val (height: Int, width: Int) = options.run { outHeight to outWidth } | |
var inSampleSize = 1 | |
if (height > reqHeight || width > reqWidth) { | |
val halfHeight: Int = height / 2 | |
val halfWidth: Int = width / 2 | |
// Calculate the largest inSampleSize value that is a power of 2 and keeps both | |
// height and width larger than the requested height and width. | |
while (halfHeight / inSampleSize >= reqHeight && halfWidth / inSampleSize >= reqWidth) { | |
inSampleSize *= 2 | |
} | |
} | |
return inSampleSize | |
} | |
fun decodeSampledBitmapFromResource( | |
res: Resources, | |
resId: Int, | |
reqWidth: Int, | |
reqHeight: Int | |
): Bitmap { | |
// First decode with inJustDecodeBounds=true to check dimensions | |
return BitmapFactory.Options().run { | |
inJustDecodeBounds = true | |
BitmapFactory.decodeResource(res, resId, this) | |
// Calculate inSampleSize | |
inSampleSize = calculateInSampleSize(this, reqWidth, reqHeight) | |
// Decode bitmap with inSampleSize set | |
inJustDecodeBounds = false | |
BitmapFactory.decodeResource(res, resId, this) | |
} | |
} | |
mImageView.setImageBitmap( | |
decodeSampledBitmapFromResource(resources, R.id.myimage, 100, 100) | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment