publicstaticint computeSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels){ int initialSize = computeInitialSampleSize(options, minSideLength, maxNumOfPixels);
privatestatic int computeInitialSampleSize(BitmapFactory.Options options, int minSideLength, int maxNumOfPixels){ double w = options.outWidth; double h = options.outHeight;
int lowerBound = (maxNumOfPixels ==-1)?1: (int) Math.ceil(Math .sqrt(w * h / maxNumOfPixels)); int upperBound = (minSideLength ==-1)?128:(int) Math.min(Math .floor(w / minSideLength), Math.floor(h / minSideLength));
if(upperBound < lowerBound){ // return the larger one when there is no overlapping zone. return lowerBound; }