2016-07-10 3 views
0

Bon après-midi! Dites-moi comment superposer une image (ImageView), ancrage aux yeux? Je souhaite effectuer le suivi à l'aide de l'API Google Vision. Peut-être qu'il y a un exemple de comment mettre un chapeau sur la tête?(Android) Comment superposer une image (ImageView) ancrant les yeux?

Ajouté. (12 Jule 2016)

Utilisez le code suivant:

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

pas d'ancrage (carré bleu) strictement à l'oeil, vous pouvez le voir dans les captures d'écran avec une distance différente de photos:

enter image description here

Dites-moi pourquoi cela se produit?

Répondre

1

Il y a un échantillon dans les échantillons API Vision Google Mobile GitHub qui illustre comment dessiner des graphiques du globe oculaire en fonction de la position des yeux: https://github.com/googlesamples/android-vision/tree/master/visionSamples/googly-eyes

Pour superposer une image au lieu des primitives de dessin (comme l'échantillon ne), vous pouvez charger l'image dans un Bitmap

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

dessiner ensuite à la toile à l'endroit désiré à l'aide canvas.drawBitmap

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

Si vous étiez marié à une ImageView, vous pouvez charger l'image dans et ensuite mettre à jour cette position directement lorsque les mises à jour tracker

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

Assurez-vous que ces appels fixes se produisent sur le fil qui a créé la vue, ou Je vais lancer une exception.

+0

theoryb Merci beaucoup pour les excellents conseils. Variante avec "Canvas.drawBitmap (mBitmap, eyePosition.x, eyePosition.y, mPaint);" Cela fonctionne comme il se doit. Mais avec le mouvement de l'imageViev est resté les mêmes problèmes. Lors de l'approximationet out (physiquement) caméra (smartphone) du visage, imageViev n'est pas lié strictement à un point (œil) et se déplace vers la gauche/droite. Comment puis-je le réparer? –

+0

J'ai mis à jour la question. Ajout de nouvelles informations (détails). Regarde s'il te plaît. –

+0

Vous devrez peut-être traduire les coordonnées pour tenir compte des positions en termes d'image plutôt que de vue. L'exemple a des méthodes auxiliaires pour cela: imageView.setX (translateX (mPosition.x)); imageView.setY (translateY (mPosition.y)); Cela les mettrait dans les bonnes coordonnées pour le canevas, ce qui je pense serait approprié si le ImageView est dans le même conteneur que le canevas. Si ce n'est pas le cas, vous devrez peut-être également ajuster le décalage du conteneur ImageView. – theoreticalb