android圖片裁剪截取中間正方形部分
在做相冊應用的過程中,需要得到一個壓縮過的縮略圖但,同時我還希望得到的bitmap能夠是正方形的,以適應正方形的imageView,傳統設置inSampleSize壓縮比率的方式只是壓縮了整張圖片,如果一個圖片的長寬差距較大,則展示出來的時候會有拉伸的現象,因此正確的做法是在壓縮之后,對bitmap進行裁剪。
代碼如下:
給定圖片維持寬高比縮放后,截取正中間的正方形部分
/** * @param bitmap 原圖 * @param edgeLength 希望得到的正方形部分的邊長 * @return 縮放截取正中部分后的位圖。 */ public static Bitmap centerSquareScaleBitmap(Bitmap bitmap, int edgeLength) { if(null == bitmap || edgeLength <= 0) { return null; } Bitmap result = bitmap; int widthOrg = bitmap.getWidth(); int heightOrg = bitmap.getHeight(); if(widthOrg > edgeLength && heightOrg > edgeLength) { //壓縮到一個最小長度是edgeLength的bitmap int longerEdge = (int)(edgeLength * Math.max(widthOrg, heightOrg) / Math.min(widthOrg, heightOrg)); int scaledWidth = widthOrg > heightOrg ? longerEdge : edgeLength; int scaledHeight = widthOrg > heightOrg ? edgeLength : longerEdge; Bitmap scaledBitmap; try{ scaledBitmap = Bitmap.createScaledBitmap(bitmap, scaledWidth, scaledHeight, true); } catch(Exception e){ return null; } //從圖中截取正中間的正方形部分。 int xTopLeft = (scaledWidth - edgeLength) / 2; int yTopLeft = (scaledHeight - edgeLength) / 2; try{ result = Bitmap.createBitmap(scaledBitmap, xTopLeft, yTopLeft, edgeLength, edgeLength); scaledBitmap.recycle(); } catch(Exception e){ return null; } } return result; }
需要注的是bitmap參數一定要是從原圖得到的,如果是已經經過BitmapFactory inSampleSize壓縮過的,可能會不是到正方形。
本文由用戶 sltr3559 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!