Android裁剪bitmap文件为正方形

Android裁剪bitmap文件为正方形

转载  2016年12月27日 16:05:36
  • 1072

原文链接:android图片裁剪截取中间正方形部分 
给定图片维持宽高比缩放后,截取正中间的正方形部分

/**

   * @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;
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47

需要注的是bitmap参数一定要是从原图得到的,如果是已经经过BitmapFactory inSampleSize压缩过的,可能会不是到正方形。

猜你喜欢

转载自hypercube.iteye.com/blog/2400708