import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Paint.Style;
import android.media.FaceDetector;
import android.media.FaceDetector.Face;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.ImageView;

public class testtest extends Activity {
    /** Called when the activity is first created. */
 private static final int CAMERA_ACTIVITY = 0;
 private static final String TAG = null;
 private ImageView mImageView;
 private Bitmap mCameraBitmap;
 Bitmap bitmap;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
//        bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.happy);
//        笑い男のイメージ
        bitmap = BitmapFactory.decodeResource(this.getResources(), R.drawable.icon);
//        インテントを生成
        Intent mIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
//        描写用のviewを取得
     mImageView =  (ImageView) findViewById(R.id.ImageView);
//  インテントを投げる
     startActivityForResult(mIntent, CAMERA_ACTIVITY);

      
    }
   
//    アクティビティの結果を取得したらここに入る
 protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
  super.onActivityResult(requestCode, resultCode, intent);
  Log.i(TAG, "Result code = " + resultCode);

  if (resultCode == RESULT_CANCELED) {
   return;
  }
  switch (requestCode) {

  case CAMERA_ACTIVITY:
   Bundle b = intent.getExtras();
   Bitmap bm = (Bitmap) b.get("data");
   // イメージを渡す
   setImageBitmap(bm);
   // イメージの大きさ判定
   if (b.containsKey(MediaStore.EXTRA_OUTPUT)) {
    Log.i(TAG, "This is a large image: ");
   } else {

    Log.i(TAG, "This is a small image: ");
   }
   break;
  }


 }

 private void setImageBitmap(Bitmap bm) {
  if(false){
   mImageView.setImageBitmap(bm);
  }else{
   this.mCameraBitmap = bm;
   setFaceImage();
  }
  
 }

 //顔認識上書き
 void setFaceImage(){
  FaceDetector.Face[] faces = new FaceDetector.Face[3]; // 結果受け取り用
  FaceDetector detector = new FaceDetector(
      mCameraBitmap.getWidth(), // ビットマップの幅
      mCameraBitmap.getHeight(), // ビットマップの高さ
      faces.length); // ここでは、最大3つの顔認識結果を受け取れるように指定
  int numFaces = detector.findFaces(mCameraBitmap, faces); // 顔認識実行
  if (numFaces > 0) {

      Bitmap newBitmap = mCameraBitmap.copy(Bitmap.Config.RGB_565, true);
      Paint paint = new Paint();
      paint.setColor(Color.argb(255, 255, 0, 0)); // 赤
      paint.setStyle(Style.STROKE); // 塗りつぶしなしの線
      Canvas canvas = new Canvas(newBitmap);
      for (int i = 0; i < numFaces; i++) { // 認識した数だけ処理
          Face face = faces[i];
          PointF midPoint = new PointF(0, 0);
          face.getMidPoint(midPoint); // 顔認識結果を取得
          float eyesDistance = face.eyesDistance();
// 描写元の設定
          Rect src = new Rect();
          src.left = 0 ;
          src.top = 0 ;
          src.right = bitmap.getWidth() ;
          src.bottom = bitmap.getHeight() ;
// 描写先の設定
          RectF rect = new RectF();
          rect.left = midPoint.x - (eyesDistance*2) ;
          rect.top = midPoint.y - (eyesDistance*2) ;
          rect.right = midPoint.x + (eyesDistance*2) ;
          rect.bottom = midPoint.y + (eyesDistance*2) ;

         
          canvas.drawBitmap(bitmap, src, rect, paint); // 笑い男に
    }
     
      mImageView.setImageBitmap(newBitmap);
  }
 }
}

 

한 일본 블로그에서 출처 했습니다.

 

얼굴을 인식해서 bitmap을 덮어씌우는 것 같은데..

 

당췌 실행이 안되네요.. 카메라가 실행되고 main으로 넘어가면 그냥 검은 화면만 나오네요..