赞
踩
public final classFaceCj {private staticBitmapFactory.Options BitmapFactoryOptionsbfo;private staticByteArrayOutputStream out;private static byte[] data;private staticFaceDetector.Face[] myFace;private staticFaceDetector 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 staticFaceDetector.Face face;private staticPointF myMidPoint;private static floatmyEyesDistance;private static ListfacePaths;private staticString facePath;public staticBitmap cutFace(Bitmap bitmap, Context context) {
facePaths= null;
BitmapFactoryOptionsbfo= newBitmapFactory.Options();
BitmapFactoryOptionsbfo.inPreferredConfig= Bitmap.Config.RGB_565; //构造位图生成的参数,必须为565。类名+enum
out = newByteArrayOutputStream();
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();for (int i = 0; i < numberOfFaceDetected; i++) {
face=myFace[i];
myMidPoint= newPointF();
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();returnbitmap;
}
}
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。