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으로 넘어가면 그냥 검은 화면만 나오네요..