Saturday, April 9, 2011

[android-developers] Canvas problem using drawing square around face

Hey guys,

I have a program that successfully accesses a gallery, allows a user
to select a picture from that gallery, and display that pic to the
user. I have tried to add a facedetector into this program but some
issues have arised, the picture is still displayed to the user but
when I try to use canvas to draw an image around a face within a
picture it doesnt and the picture is shown without any square. Im not
sure whether its an issue with Identifying the face or drawing a
square around the face. Any help would be really appreciated. Thanks
for your time.

The code is as follows

[code]

public class Activity3 extends Activity {

private static final int ACTIVITY_SELECT_IMAGE = 1;
private static final int GALLERY_ID = Menu.FIRST + 1;
public String mCurrentImagePath = null;
public int imageWidth, imageHeight;
public int numberOfFace = 5;
public FaceDetector myFaceDetect;
public FaceDetector.Face[] myFace;
float myEyesDistance;
int numberOfFaceDetected;
Bitmap bitmap;
public Canvas canvas;

private ImageView mImageView;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mImageView = new ImageView(this);
setContentView(mImageView);


}

// the canvas is below


public void onDraw(Canvas c) {
// TODO Auto-generated method stub

canvas.drawBitmap(bitmap, 0, 0, null);

Paint myPaint = new Paint();
myPaint.setColor(Color.GREEN);
myPaint.setStyle(Paint.Style.STROKE);
myPaint.setStrokeWidth(3);

for(int i=0; i < numberOfFaceDetected; i++)
{
Face face = myFace[i];
PointF myMidPoint = new PointF();
face.getMidPoint(myMidPoint);
myEyesDistance = face.eyesDistance();
c.drawRect(
(int)(myMidPoint.x - myEyesDistance),
(int)(myMidPoint.y - myEyesDistance),
(int)(myMidPoint.x + myEyesDistance),
(int)(myMidPoint.y + myEyesDistance),
myPaint);

}
}


//adds a menu

@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);

menu.add(0, GALLERY_ID, 0, "Gallery");
return true;
}


//if gallery is chosen begin activity and allow user to select a
pic from the gallery

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
switch (item.getItemId()) {

case GALLERY_ID:
Intent galleryIntent = new Intent(Intent.ACTION_PICK,
Images.Media.INTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, ACTIVITY_SELECT_IMAGE);
return true;
}

return super.onMenuItemSelected(featureId, item);
}


//when the user has selected an image and no error has been occurred
retrieve the image detect faces within the image and display the
image.

@Override
public void onActivityResult(int requestCode, int resultCode, Intent
data) {

if (requestCode == ACTIVITY_SELECT_IMAGE && resultCode == RESULT_OK)
{
try {

Uri currImageURI = data.getData();
String[] proj = { Images.Media.DATA, Images.Media.ORIENTATION };
Cursor cursor = managedQuery(currImageURI, proj, null, null,null);
int columnIndex = cursor.getColumnIndex(proj[0]);
cursor.moveToFirst();
mCurrentImagePath = cursor.getString(columnIndex);


BitmapFactory.Options BitmapFactoryOptionsbfo = new
BitmapFactory.Options();
BitmapFactoryOptionsbfo.inPreferredConfig = Bitmap.Config.RGB_565;


bitmap = BitmapFactory.decodeFile(mCurrentImagePath);
int width = bitmap.getWidth();
int height = bitmap.getHeight();


myFace = new FaceDetector.Face[numberOfFace];
myFaceDetect = new FaceDetector(width, height, numberOfFace);
numberOfFaceDetected = myFaceDetect.findFaces(bitmap, myFace);
canvas= new Canvas();

mImageView.setImageBitmap(bitmap);

}

catch (Exception e) {
}

}

}

}
[/code]


--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

No comments:

Post a Comment