예제 #1
0
		/// <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);
			}
		}
예제 #2
0
			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;
			}