Ich benutze Google APIs für Gesichtserkennung in Android. Wenn ein Gesicht erkannt wird, zeichne ich ein Bild auf die Leinwand. Ich versuche, das Bild mit dem Overlay zu erfassen, indem ich auf eine Schaltfläche klicke. In der Methode public void onPictureTaken(byte[] bytes)
enthalten die Bytes nur das Bild ohne die Überlagerung. Gibt es eine Möglichkeit, das Bild mit dem Overlay darauf zu speichern?Wie speichert man ein Bild mit einem Overlay in CameraSource von Google APIs für Android?
2
A
Antwort
0
Sie müssen
eine neue Leinwand durch eine neue Bitmap-backed erstellen,
Bitmap picture = BitmapFactory.decodeByteArray(bytes, 0, bytes.length); Bitmap resizedBitmap = Bitmap.createBitmap(mGraphicOverlay.getWidth(),mGraphicOverlay.getHeight(),picture.getConfig()); Canvas canvas = new Canvas(resizedBitmap);
das erfasste Bitmap zeichnen darüber
- die Overlays darüber
- ziehen neue Bitmap speichern
Auch für die Overlays, um das Bild oder das Overlay benötigen Sie entweder das aufgenommene Bild entsprechen
Matrix matrix = new Matrix();
matrix.setScale((float)resizedBitmap.getWidth()/(float)picture.getWidth(),(float)resizedBitmap.getHeight()/(float)picture.getHeight());
// mirror by inverting scale and translating
matrix.preScale(-1, 1);
matrix.postTranslate(canvas.getWidth(), 0);
Paint paint = new Paint();
canvas.drawBitmap(picture,matrix,paint);
tracker.getmEyesGraphic().draw(canvas); // make those accessible
+0
Was ist der Tracker in der letzten Zeile? –
ich aus der Klasse GraphicOverlay mit 'this.getDrawingCache() das Overlay erhalten spiegeln;', aber es gibt immer die gleiche Überlagerung zurück. Zum Beispiel, wenn ich das Overlay ändere, gibt es immer das erste Overlay zurück. Wenn das Bild aufgenommen wird, wird es gedreht, manchmal für 90, manchmal für -90 Grad. Die Überlagerung, die ich bekomme, ist in der richtigen Position, also wenn ich es über das Bild stelle, sieht es nicht richtig aus. – user6120360
Beachten Sie, dass es drei verschiedene Koordinatensysteme gibt, die Sie verwalten müssen: (1) Vorschaubildkoordinaten - dies sind die vom Gesichtsdetektor angegebenen Koordinaten, (2) Zeichenleinwandkoordinaten - dies sind die Koordinaten, die zum Zeichnen des Overlays verwendet werden (3) Bildkoordinaten - unterscheidet sich von Vorschau, dass es wahrscheinlich höhere Auflösung ist. Beachten Sie auch, dass bei Verwendung der Frontkamera die Vorschau/Überlagerung horizontal gedreht wird (ein Spiegelbild). – pm0733464
Wie bekomme ich das richtige Overlay, wenn die Schaltfläche erfasst wird? – user6120360