Установите xy-позицию для просмотра изображений с помощью FaceDetection

#android #android-layout #position #imageview

#Android #android-макет #положение #просмотр изображения

Вопрос:

Я обнаруживаю лицо в своем приложении. Я использую два ImageView, первый для лица, а второй для маски. Мне нужно установить положение маски поверх рассчитанного положения лица, а затем переместить маску с помощью события касания. Для события касания я использовал это руководство:http://blahti.wordpress.com/2011/01/17/moving-views-part-2

Метод масштабирования маски может возвращать положение лица. Я пытался установить положение XY для просмотра изображений маски, но оно всегда отображается в позиции 0.0. над лицом. Затем я могу переместить маску ImageView поверх лица. «вид» — это моя маска. В идеале мне нужно инициализировать mask imageview поверх положения лица.

PD: Извините, у меня плохой английский.

 protected Bitmap draw(int mode) {

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.c10);

    int width = bitmap.getWidth();
    int height = bitmap.getHeight();

    Point position = new Point();

    xRatio = anchoCara * 1.0f / anchoCara;
    yRatio = altoCara * 1.0f / altoCara;


    Bitmap resizedBitmap = null;

    float factor = 9.6f;//9.6

    for (int i = 0; i < eyesMidPts.length; i  ) {
        if (eyesMidPts[i] != null) {
            pOuterBullsEye.setStrokeWidth(eyesDistance[i] / 6);

            float newWidth = eyesDistance[i] * factor;
            float newHeight = eyesDistance[i] * factor;

            float scaleWidth = (newWidth) / width;
            float scaleHeight = (newHeight) / height;

            Matrix matrix = new Matrix();
            matrix.postScale(scaleWidth, scaleHeight);

            resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width,
                    height, matrix, true);

            position.set(
                            (int) ((eyesMidPts[i].x * xRatio) - (eyesDistance[i] * factor) ),//2
                            (int) ((eyesMidPts[i].y * yRatio) - (eyesDistance[i] * factor) ));

            Log.e("Face", "positio x : "   position.x);
            Log.e("Face", "positio y : "   position.y);


            Log.e("Face", "mascara width : "   resizedBitmap.getWidth());
            Log.e("Face", "mascara heigth : "   resizedBitmap.getHeight());
//              view.setBackgroundDrawable(new BitmapDrawable(resizedBitmap));
//              view.setAdjustViewBounds(true);
//              Log.i("Face", "positio x : "   view.getScrollX());
//              Log.i("Face", "positio y : "   view.getScrollY());
        }
    }
    return resizedBitmap;
}
  

Комментарии:

1. Я читал слишком быстро и подумал, что заголовок вопроса гласит «сексуальная позиция». Полностью разочарован.

Ответ №1:

Наконец, я сделал это, используя следующий код:

 @Override
public void onGlobalLayout() {
    // TODO Auto-generated method stub
    faceDetect(MODO_VIEW);      
    Display m=getWindowManager().getDefaultDisplay();
    anchoPant=m.getWidth();
    Log.i("Face","separacion derecha: " ((anchoPant-cara.getWidth())/2) "px" );
    MyAbsoluteLayout.LayoutParams mp=new MyAbsoluteLayout.LayoutParams(MyAbsoluteLayout.LayoutParams.WRAP_CONTENT, MyAbsoluteLayout.LayoutParams.WRAP_CONTENT, (anchoPant-cara.getWidth())/2, 0);
    cara.setLayoutParams(mp);

    //view.setBackgroundDrawable(new BitmapDrawable(draw(MODO_VIEW)));      
    view.setImageBitmap(draw(MODO_VIEW));       
    MyAbsoluteLayout.LayoutParams lp=new MyAbsoluteLayout.LayoutParams(MyAbsoluteLayout.LayoutParams.WRAP_CONTENT,MyAbsoluteLayout.LayoutParams.WRAP_CONTENT,position.x ((anchoPant-cara.getWidth())/2),position.y);
    view.setLayoutParams(lp);
    view.getViewTreeObserver().removeGlobalOnLayoutListener(this);

}
  

В моем вопросе метод может вернуть позицию, затем используя MyAbsoluteLayout.LayoutParams поверх OnGlobalLayout() Я могу установить положение XY без проблем.