Gibt es eine Entsprechung für Camera.PreviewCallback in Camera2 von API 21, besser als das Zuordnen zu einem SurfaceTexture und das Ziehen einer Bitmap? Ich muss in der Lage sein, Vorschaudaten von der Kamera als YUV zu ziehen?Camera.PreviewCallback-Äquivalent in Camera2-API
Antwort
Sie können mit dem Beispielcode Camera2Basic von Google beginnen.
Sie müssen die Oberfläche des ImageReader
als Ziel auf die Vorschau-Erfassungs-Anfrage hinzuzufügen:
//set up a CaptureRequest.Builder with the output Surface
mPreviewRequestBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
mPreviewRequestBuilder.addTarget(surface);
mPreviewRequestBuilder.addTarget(mImageReader.getSurface());
Danach werden Sie das Bild in der ImageReader.OnImageAvailableListener
abrufen können:
private final ImageReader.OnImageAvailableListener mOnImageAvailableListener = new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = null;
try {
image = reader.acquireLatestImage();
if (image != null) {
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
Bitmap bitmap = fromByteBuffer(buffer);
image.close();
}
} catch (Exception e) {
Log.w(LOG_TAG, e.getMessage());
}
}
};
Um a Bitmap
aus dem ByteBuffer
:
Bitmap fromByteBuffer(ByteBuffer buffer) {
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes, 0, bytes.length);
return BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
}
Ja, verwenden Sie die Klasse ImageReader.
Erstellen Sie einen ImageReader mit dem Format ImageFormat.YUV_420_888 und Ihrer gewünschten Größe (stellen Sie sicher, dass Sie eine Größe auswählen, die von dem verwendeten Kameragerät unterstützt wird).
Verwenden Sie ImageReader.getSurface() dann für eine Oberfläche, die zusammen mit Ihren anderen Vorschauausgaben an CameraDevice.createCaptureSession() bereitgestellt wird.
Schließlich fügen Sie in Ihrer wiederholten Erfassungsanforderung die bereitgestellte Oberfläche von ImageReader als Ziel hinzu, bevor Sie sie in Ihrer Erfassungssitzung als wiederholende Anforderung festlegen.
@ Eddy Tal vala, wenn ich ein Ziel wie mPreviewRequestBuilder.addTarget (mImageReader.getSurface()); Es friert die Oberflächen ein. – user1154390
Welchen Fehler bekommen Sie im Logcat? Und haben Sie die Oberfläche zu Ihrem Aufruf createCaptureSession hinzugefügt? –
Ja Beide Oberflächen für die Ausgabe in createCaptureSession festlegen. Logcat zeigt keinen Fehler an. Es sperrt geradeaus, aber stecken geblieben von den letzten zwei Tagen. – user1154390
- 1. camera2api Auto-Capture aktuelle Vorschaurahmen
- 2. Warum App keine Erlaubnis Camera2API sehen?
- 3. Front Camera in Camera2 nicht erfassen Bild
- 4. Wer hat ein Material, wie man mit der Face Detection Camera 2 API arbeitet?
- 5. In CSV in Array in Python konvertieren
- 6. 'IN' & 'NICHT IN' in Linq Abfrage
- 7. % in% Veränderung in dplyr Paket in R
- 8. Schleifen in Schleifen in Schleifen in Java
- 9. Funktionsparameter in Zeichenfolge in Parameter in Objekt
- 10. In Operator in Linq
- 11. In Python in bash
- 12. in Verknüpfungstabelle in Hibernate
- 13. IN-Klausel in sqlite
- 14. \ in path.combine in C#
- 15. "IN" Operator in Linq
- 16. Eibisch Berechtigungen und Erklärung
- 17. in
- 18. in
- 19. Synchronisation in Vektoren in Java
- 20. SQLite in Operator in query()
- 21. Blobs in Blobstore in GAE
- 22. mehr IN-Bedingungen in JPQL
- 23. RadUpload in FormView in RadAjaxPanel
- 24. Javascript in select in Selen
- 25. SQL - IN vs. NICHT IN
- 26. Bindung in ItemTemplate in ResourceDictionary
- 27. Split in Großbuchstaben in PHP?
- 28. Kreuzung in sqlite3 in Python
- 29. Assoziativität von "in" in Python?
- 30. Vorwahlwert in Combobox in extjs
friert das Textureview ein. (mPreviewRequestBuilder.addTarget (mImageReader.getSurface());) – user1154390