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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!