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用PopupWindow實現新浪微博的分組信息實例
PopupWindow可以實現浮層效果,而且可以自定義顯示位置,本篇文章主要介紹Android用PopupWindow實現新浪微博的分組信息,有需要的可以了解一下。2016-11-11
Android 6.0 藍牙搜索不到設備原因,MIUI權限申請機制方法
今天小編就為大家分享一篇Android6.0 藍牙搜索不到設備原因,MIUI權限申請機制方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
詳解Android創(chuàng)建Handler的必備知識點
本篇文章主要介紹Handler中需要了解的幾個必備知識點,比如Handler創(chuàng)建、異步Handler是個啥及如何創(chuàng)建,感興趣的小伙伴快跟隨小編一起學習一下2022-10-10
Android listview動態(tài)加載列表項實現代碼
這篇文章主要為大家詳細介紹了Android listview動態(tài)加載列表項實現代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-06-06
Android實現在xml文件中引用自定義View的方法分析
這篇文章主要介紹了Android實現在xml文件中引用自定義View的方法,結合實例形式分析了Android自定義view的實現方法與相關注意事項,需要的朋友可以參考下2017-06-06

