2016-07-10 27 views
0

Guten Tag! Erzähl mir, wie man ein Bild (ImageView) überlagert, das an den Augen verankert wird? Ich möchte mit Google Vision API verfolgen. Vielleicht gibt es ein Beispiel, wie man einen Hut auf den Kopf stellt?(Android) Wie überlagert man ein Bild (ImageView), das die Augen verankert?

Hinzugefügt. (12 Jule 2016)

Verwenden Sie den folgenden Code ein:

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

nicht Verankerung (blaues Quadrat) streng an das Auge, können Sie es in den Screenshots mit unterschiedlichem Abstand von den Fotos sehen:

enter image description here

Bitte sagen Sie mir, warum das passiert?

Antwort

1

Es gibt eine Probe in dem Google Mobile Vision API GitHub Proben, die zeigen, wie Augapfel Grafiken zeichnen auf der Grundlage der Position der Augen: https://github.com/googlesamples/android-vision/tree/master/visionSamples/googly-eyes

Um ein Bild anstelle von Zeichnungs Primitiven zu überlagern (wie die Stichprobe), können Sie das Bild in eine Bitmap

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

Dann ziehen sie auf die Leinwand an der gewünschten Stelle mit canvas.drawBitmap

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

Wenn Sie zu einem Image verheiratet waren, konnten Sie das Bild hinein laden und dann diese Position direkt aktualisieren, wenn der Verfolger Updates

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

diese Set Aufrufe auf dem Thread passieren Stellen Sie sicher, dass Sie die Ansicht erstellt, oder sie werde eine Ausnahme werfen.

+0

theoreticalb Vielen Dank für die hervorragende Beratung. Variante mit "Canvas.drawBitmap (mBitmap, eyePosition.x, eyePosition.y, mPaint);" Es funktioniert wie es sollte. Aber mit der Bewegung von imageViev blieben die gleichen Probleme. Beim Approximieren und Ausblenden der (physischen) Kamera (Smartphone) aus dem Gesicht, ist imageViev nicht fest an einen Punkt (Auge) gebunden und verschiebt sich nach links/rechts. Wie kann ich es reparieren? –

+0

Ich habe die Frage aktualisiert. Neue Informationen hinzugefügt (Details). Schau bitte. –

+0

Möglicherweise müssen Sie die Koordinaten übersetzen, um die Positionen zu berücksichtigen, die sich auf das Bild und nicht auf die Ansicht beziehen. Das Beispiel verfügt über folgende Hilfsmethoden: imageView.setX (translateX (mPosition.x)); imageView.setY (translateY (mPosition.y)); Das würde sie in die richtigen Koordinaten für die Zeichenfläche bringen, was ich für angemessen halte, wenn sich die ImageView im selben Container wie die Zeichenfläche befindet. Wenn nicht, müssen Sie möglicherweise auch den Offset des ImageView-Containers anpassen. – theoreticalb