需求:按照屏幕比例或者按照指定的宽高比例裁剪,并且保持图片不能缩放。所以想法是按照需求的比例,抠出图片中间那部分。若是加载网络图片,可以用Glide加载过程中的回调。
/** * @param bitmap 源bitmap * @param w 缩放后指定的宽高 * @param h 缩放后指定的高度 * @return 缩放后的中间部分图片 Bitmap */ public static Bitmap zoomBitmap(Bitmap bitmap, int w, int h) { Bitmap newbmp = null; int width = bitmap.getWidth(); int height = bitmap.getHeight(); LogUtil.i("zoomBitmap---", "" + width + "---" + "height:" + height); if(bitmap!=null){ double whscale=(double)w/(double)h;//宽高比 double hwscale=(double)h/(double)w;//高宽比 int nWidth = (int) (height*whscale); int nHeight = (int) (width*hwscale); try { if (width>height) { if (width<nWidth) { if ((height-nHeight)>nHeight/3) { newbmp = Bitmap.createBitmap(bitmap,0,(int)nHeight/3, width,nHeight); }else{ newbmp = Bitmap.createBitmap(bitmap,0,0, width,nHeight); } }else{ newbmp = Bitmap.createBitmap(bitmap,(int)(width-nWidth)*2/3,0, nWidth,height); } } else if (width<=height) { if (height<nHeight) { if ((width-nWidth)>nWidth/3) { newbmp = Bitmap.createBitmap(bitmap,(int)nWidth/3,0, nWidth,height); }else{ newbmp = Bitmap.createBitmap(bitmap,0,0, nWidth,height); } }else{ newbmp = Bitmap.createBitmap(bitmap,0,(height-nHeight)*2/3, width,nHeight); } } } catch (Exception e) { e.printStackTrace(); return null; } } return newbmp; }
需要注意的是:按比例计算图片宽或高的时候,需要比较比例高与图片本身高的大小。
By LiYing