OSDN Git Service

original
[gb-231r1-is01/GB_2.3_IS01.git] / cts / tests / src / android / media / cts / FaceView.java
diff --git a/cts/tests/src/android/media/cts/FaceView.java b/cts/tests/src/android/media/cts/FaceView.java
new file mode 100644 (file)
index 0000000..6d3d84b
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.media.cts;
+
+import android.content.Context;
+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.media.FaceDetector;
+import android.media.FaceDetector.Face;
+import android.view.View;
+
+import java.util.ArrayList;
+
+public class FaceView extends View {
+    private static final int NUM_FACES = 10;
+    private FaceDetector mFaceDetector;
+    private Face[] mAllFaces = new Face[NUM_FACES];
+    private Bitmap mSourceImage;
+    private Paint mTmpPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+    private Paint mPOuterBullsEye = new Paint(Paint.ANTI_ALIAS_FLAG);
+    private Paint mPInnerBullsEye = new Paint(Paint.ANTI_ALIAS_FLAG);
+    private int mPicWidth;
+    private int mPicHeight;
+
+    public ArrayList<Face> detectedFaces = new ArrayList<Face>();
+
+    public FaceView(Context context, int resId) {
+        super(context);
+
+        mPInnerBullsEye.setStyle(Paint.Style.FILL);
+        mPInnerBullsEye.setColor(Color.RED);
+
+        mPOuterBullsEye.setStyle(Paint.Style.STROKE);
+        mPOuterBullsEye.setColor(Color.RED);
+
+        mTmpPaint.setStyle(Paint.Style.STROKE);
+        mTmpPaint.setTextAlign(Paint.Align.CENTER);
+
+        BitmapFactory.Options bfo = new BitmapFactory.Options();
+        bfo.inPreferredConfig = Bitmap.Config.RGB_565;
+        bfo.inScaled = false;
+        bfo.inDither = false;
+
+        mSourceImage = BitmapFactory.decodeResource(getResources(), resId, bfo);
+
+        mPicWidth = mSourceImage.getWidth();
+        mPicHeight = mSourceImage.getHeight();
+
+        mFaceDetector = new FaceDetector(mPicWidth, mPicHeight, NUM_FACES);
+        int numFaces = mFaceDetector.findFaces(mSourceImage, mAllFaces);
+
+        for (int i = 0; i < numFaces; i++) {
+            detectedFaces.add(mAllFaces[i]);
+        }
+    }
+
+    @Override
+    protected void onDraw(Canvas canvas) {
+        float scale = Math.min((float) getWidth() / mPicWidth, (float) getHeight() / mPicHeight);
+        Rect scaledRect = new Rect(0, 0, mPicWidth, mPicHeight);
+        scaledRect.scale(scale);
+        canvas.drawBitmap(mSourceImage, null, scaledRect, mTmpPaint);
+        for (Face face : detectedFaces) {
+            PointF eyesMP = new PointF();
+            face.getMidPoint(eyesMP);
+            float centerX = eyesMP.x * scale;
+            float centerY = eyesMP.y * scale;
+            float eyesDistance = face.eyesDistance() * scale;
+            mPOuterBullsEye.setStrokeWidth(eyesDistance / 6);
+            canvas.drawCircle(centerX, centerY, eyesDistance / 2, mPOuterBullsEye);
+            canvas.drawCircle(centerX, centerY, eyesDistance / 6, mPInnerBullsEye);
+        }
+    }
+}