/// <summary> /// detect faces on a picture and draw a square in each face /// </summary> private void detectFaces(){ //first check if picture has been taken if(null != cameraBitmap){ //get width of a picture int width = cameraBitmap.Width; //get height of a picture int height = cameraBitmap.Height; //Initialize a facedetector with the picture dimensions and the max number of faces to check FaceDetector detector = new FaceDetector(width, height, MainActivity.MAX_FACES); //Create an array of faces with the number of max faces to check Android.Media.FaceDetector.Face[] faces = new Android.Media.FaceDetector.Face[MainActivity.MAX_FACES]; //create a main bitmap Bitmap bitmap565 = Bitmap.CreateBitmap(width, height, Bitmap.Config.Rgb565); //create a dither paint Paint ditherPaint = new Paint(); //create a draw paint Paint drawPaint = new Paint(); //set true dither to dither paint variable ditherPaint.Dither = true; //set color red for the square drawPaint.Color = Color.Red; //set stroke to style drawPaint.SetStyle(Paint.Style.Stroke); //set stroke width drawPaint.StrokeWidth = 2; //Create a canvas Canvas canvas = new Canvas(); //set bitmap to canvas canvas.SetBitmap(bitmap565); //draw bitmap to canvas canvas.DrawBitmap(cameraBitmap, 0, 0, ditherPaint); //get a number of faces detected int facesFound = detector.FindFaces(bitmap565, faces); //mid face point PointF midPoint = new PointF(); //eye distance variable float eyeDistance = 0.0f; //confidence variable float confidence = 0.0f; //print numbre of faces found System.Console.WriteLine ("Number of faces found: " + facesFound); //check if found at least one face if(facesFound > 0) { //for each face draw a red squeare for(int index=0; index<facesFound; ++index){ // get midpoint of a face faces[index].GetMidPoint(midPoint); //get eye distance eyeDistance = faces[index].EyesDistance(); //get confidence confidence = faces [index].Confidence (); //print all parameters System.Console.WriteLine ("Confidence: " + confidence + ", Eye distance: " + eyeDistance + ", Mid Point: (" + midPoint.X + ", " + midPoint.Y + ")"); //draw a square in the picture canvas.DrawRect((int)midPoint.X - eyeDistance , (int)midPoint.Y- eyeDistance , (int)midPoint.X + eyeDistance, (int)midPoint.Y + eyeDistance, drawPaint); } } //get imageview from layout ImageView imageView = (ImageView)FindViewById(Resource.Id.image_view); //set image with the red squares to imageview imageView.SetImageBitmap(bitmap565); } }
protected override void OnSizeChanged (int w, int h, int oldw, int oldh) { int curW = mBitmap != null ? mBitmap.Width : 0; int curH = mBitmap != null ? mBitmap.Height : 0; if (curW >= w && curH >= h) { return; } if (curW < w) curW = w; if (curH < h) curH = h; var newBitmap = Bitmap.CreateBitmap (curW, curH, Bitmap.Config.Argb8888); var newCanvas = new Canvas (); newCanvas.SetBitmap (newBitmap); if (mBitmap != null) { newCanvas.DrawBitmap (mBitmap, 0, 0, null); } mBitmap = newBitmap; mCanvas = newCanvas; mFadeSteps = MAX_FADE_STEPS; }