Android 裁剪人脸类的实例代码

 更新时间:2018年08月02日 16:56:06   作者:xi阳  
这篇文章主要介绍了Android 裁剪人脸类的实例代码,需要的朋友可以参考下

人脸裁剪类

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 裁剪人脸的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Android APP编写简单答题器

    Android APP编写简单答题器

    这篇文章主要为大家详细介绍了Android APP编写简单答题器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • DownloadManager实现文件下载功能

    DownloadManager实现文件下载功能

    这篇文章主要为大家详细介绍了DownloadManager实现文件下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11
  • Android高手进阶教程(二十二)之Android中几种图像特效处理的集锦汇总!!

    Android高手进阶教程(二十二)之Android中几种图像特效处理的集锦汇总!!

    本篇文章主要介绍了Android中几种图像特效处理,比如圆角,倒影,还有就是图片缩放,Drawable转化为Bitmap,Bitmap转化为Drawable等,有需要的可以了解一下。
    2016-11-11
  • Android编程获取网络时间实例分析

    Android编程获取网络时间实例分析

    这篇文章主要介绍了Android编程获取网络时间,结合实例形式对比分析了Android通过访问网络及通过GPS获取网络时间的具体步骤与实现技巧,需要的朋友可以参考下
    2016-01-01
  • ViewPager+RadioGroup仿微信主界面

    ViewPager+RadioGroup仿微信主界面

    这篇文章主要为大家详细介绍了ViewPager+RadioGroup仿微信主界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android网格布局GridView实现漂亮的多选效果

    Android网格布局GridView实现漂亮的多选效果

    这篇文章主要为大家详细介绍了Android网格布局GridView实现漂亮的多选效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12
  • Android登录记住多个密码的实现方法

    Android登录记住多个密码的实现方法

    通过在popouWindow里面加上ListView,数据是把List以字符串按照JSON的样式存入本地,下面通过实例代码给大家介绍android登录记住多个密码的实现方法,需要的的朋友参考下吧
    2017-07-07
  • Android调试神器stetho使用详解和改造

    Android调试神器stetho使用详解和改造

    今天小编就为大家分享一篇关于Android调试神器stetho使用详解和改造,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Android端使用Modbus协议的简单方法

    Android端使用Modbus协议的简单方法

    Modbus协议是全球第一个用于工业现场的总线协议,与外设交互可以采用串口通信,tcp等方式,这篇文章主要给大家介绍了关于Android端使用Modbus协议的简单方法,需要的朋友可以参考下
    2021-11-11
  • Android选项菜单用法实例分析

    Android选项菜单用法实例分析

    这篇文章主要介绍了Android选项菜单用法,以完整实例形式较为详细分析了Android选项菜单的布局及功能实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-09-09

最新评论