首页 > 系统 > Android > 正文

Android 裁剪人脸类的实例代码

2019-10-21 21:43:09
字体:
来源:转载
供稿:网友

人脸裁剪类

public final class FaceCj {  private static BitmapFactory.Options BitmapFactoryOptionsbfo;  private static ByteArrayOutputStream out;  private static byte[] data;  private static FaceDetector.Face[] myFace;  private static FaceDetector myFaceDetect;  private static int tx = 0;  private static int ty = 0;  private static int bx = 0;  private static int by = 0;  private static int width = 0;  private static int height = 0;  private static float wuchax = 0;  private static float wuchay = 0;  private static FaceDetector.Face face;  private static PointF myMidPoint;  private static float myEyesDistance;  private static List<String> facePaths;  private static String facePath;  public static Bitmap cutFace(Bitmap bitmap, Context context) {    facePaths = null;    BitmapFactoryOptionsbfo = new BitmapFactory.Options();    BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565; // 构造位图生成的参数,必须为565。类名+enum    out = new ByteArrayOutputStream();    bitmap.compress(Bitmap.CompressFormat.JPEG, 50, out);    data = out.toByteArray();    bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,        BitmapFactoryOptionsbfo);    try {      out.flush();      out.close();    } catch (IOException e) {      // TODO Auto-generated catch block      e.printStackTrace();    }    width = bitmap.getWidth();    height = bitmap.getHeight();    myFace = new FaceDetector.Face[5]; // 分配人脸数组空间    myFaceDetect = new FaceDetector(bitmap.getWidth(), bitmap.getHeight(), 5);    int numberOfFaceDetected = myFaceDetect.findFaces(bitmap, myFace);    if (numberOfFaceDetected <= 0) {// FaceDetector构造实例并解析人脸      bitmap.recycle();      return null;    }    facePaths = new ArrayList<String>();    for (int i = 0; i < numberOfFaceDetected; i++) {      face = myFace[i];      myMidPoint = new PointF();      face.getMidPoint(myMidPoint);      myEyesDistance = face.eyesDistance();  //得到人脸中心点和眼间距离参数,并对每个人脸进行画框      wuchax = myEyesDistance / 2 + myEyesDistance;      wuchay = myEyesDistance * 2 / 3 + myEyesDistance;      if (myMidPoint.x - wuchax < 0) {//判断左边是否出界        tx = 0;      } else {        tx = (int) (myMidPoint.x - wuchax);      }      if (myMidPoint.x + wuchax > width) {//判断右边是否出界        bx = width;      } else {        bx = (int) (myMidPoint.x + wuchax);      }      if (myMidPoint.y - wuchay < 0) {//判断上边是否出界        ty = 0;      } else {        ty = (int) (myMidPoint.y - wuchay);      }      if (myMidPoint.y + wuchay > height) {//判断下边是否出界        by = height;      } else {        by = (int) (myMidPoint.y + wuchay);      }      try {        return Bitmap.createBitmap(bitmap, tx, ty, bx - tx, by - ty);//这里可以自行调整裁剪宽高      } catch (Exception e) {        e.printStackTrace();      }    }    bitmap.recycle();    return bitmap;  }}

总结

以上所述是小编给大家介绍的Android 裁剪人脸的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对VEVB武林网网站的支持!


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表