2016-07-10 2 views
0

Добрый день! Скажите, как наложить изображение (ImageView), привязать к глазам? Я хочу отслеживать с помощью API Google Vision. Может быть, есть пример того, как надеть шляпу на голову?(Android) Как наложить изображение (ImageView) на привязку к глазам?

Добавлено. (12 Июль 2016)

Используйте следующий код:

imageView.setX(mPosition.x); 
imageView.setY(mPosition.y); 
postInvalidate(); 

не анкерный (синий квадрат) строго на глаз, вы можете увидеть его на скриншотах с различным расстоянием от фотографий:

enter image description here

Скажите, пожалуйста, почему это происходит?

ответ

1

Там есть образец в Google Mobile Vision, API GitHub образцов, которая иллюстрирует, как рисовать глазное яблоко графики на основе положения глаз: https://github.com/googlesamples/android-vision/tree/master/visionSamples/googly-eyes

Для наложения изображения вместо примитивов для рисования (как образец делает), вы можете загрузить изображение в Bitmap

InputStream inputStream = contentResolver.openInputStream(imageUri); 
Bitmap mBitmap = BitmapFactory.decodeStream(inputStream, null, options); 

Затем нарисуйте его на холсте в нужном месте с помощью canvas.drawBitmap

canvas.drawBitmap(mBitmap, eyePosition.x, eyePosition.y, mPaint); 

Если вы были замужем за ImageView, вы можете загрузить изображение в него, а затем обновить эту позицию непосредственно, когда обновление трекера

imageView.setX(mPosition.x); 
imageView.setY(mPosition.y); 
postInvalidate(); 

Убедитесь, что эти установленные вызовы происходят на потоке, который создал View, или они Вы сделаете исключение.

+0

theorb Спасибо за отличный совет. Вариант с "Canvas.drawBitmap (mBitmap, eyePosition.x, eyePosition.y, mPaint);" Он работает так, как должен. Но с движением образаViev остались те же проблемы. Когда аппроксимация и выход (физически) камеры (смартфона) с лица, изображениеViev не привязывается строго к одной точке (глаз) и сдвигается влево/вправо. Как я могу это исправить? –

+0

Я обновил вопрос. Добавлена ​​новая информация (подробнее). Смотри, пожалуйста. –

+0

Возможно, вам потребуется перевести координаты в учетную запись для позиций с точки зрения изображения, а не вида. Образец имеет вспомогательные методы для этого: imageView.setX (translateX (mPosition.x)); imageView.setY (translateY (mPosition.y)); Это поместило бы их в правильные координаты для холста, что, я думаю, было бы подходящим, если ImageView находится в том же контейнере, что и холст. Если нет, вам может потребоваться также настроить смещение контейнера ImageView. – theoreticalb