![](/img/trans.png)
[英]How to set a box on CameraX preview so as to processes it using ImageAnalysis in Java?
[英]How to set viewfinder using CameraX in Java?
我一直在開發一個需要使用 CameraX 預覽 stream 的應用程序,但它也需要一個取景器。 我已經成功實現了預覽,但是對於取景器部分,我可以在網上找到的大多數代碼都在 Kotlin 中,我作為新手似乎無法有效地將其轉換為基於 java 的代碼。 任何幫助將非常感激。
我的 XML 預覽代碼:
<androidx.camera.view.PreviewView
android:id="@+id/previewView"
android:layout_width="match_parent"
android:layout_height="675dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar">
我的 CameraX 預覽代碼:
PreviewView mCameraView;
Camera camera;
void startCamera() {
mCameraView = findViewById(R.id.previewView);
cameraProviderFuture = ProcessCameraProvider.getInstance(this);
cameraProviderFuture.addListener(() -> {
try {
ProcessCameraProvider cameraProvider = cameraProviderFuture.get();
bindPreview(cameraProvider);
} catch (ExecutionException | InterruptedException e) {
// No errors need to be handled for this Future.
// This should never be reached.
}
}, ContextCompat.getMainExecutor(this));
}
void bindPreview(@NonNull ProcessCameraProvider cameraProvider) {
Preview preview = new Preview.Builder().
setTargetResolution(BestSize())
.build();
CameraSelector cameraSelector = new CameraSelector.Builder()
.requireLensFacing(CameraSelector.LENS_FACING_BACK)
.build();
preview.setSurfaceProvider(mCameraView.createSurfaceProvider());
camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview);
}
private int degreesToFirebaseRotation(int degrees) {
switch (degrees) {
case 0:
return FirebaseVisionImageMetadata.ROTATION_0;
case 90:
return FirebaseVisionImageMetadata.ROTATION_90;
case 180:
return FirebaseVisionImageMetadata.ROTATION_180;
case 270:
return FirebaseVisionImageMetadata.ROTATION_270;
default:
throw new IllegalArgumentException(
"Rotation must be 0, 90, 180, or 270.");
}
}
對不起,奇怪的縮進,如果問題很愚蠢。 提前致謝。
您還需要將預覽用例綁定到生命周期所有者。
preview.setSurfaceProvider(mCameraView.createSurfaceProvider());
cameraProvider.unbindAll();
Camera camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview);
// Do stuff with camera
雖然這個問題可能早已不復存在,但我希望它能給跟進的人提供線索。
First I believe you should have seen this sample code from Google: https://developer.android.com/codelabs/camerax-getting-started where the so-called viewFinder
is actually the id of a component in the xml
layout file, ie你的R.id.previewView
。
由於 Google 示例使用了kotlin-android-extensions
插件,因此您可以在 kotlin 代碼中直接使用組件的 id。
在本機 kotlin 代碼中找不到它並不罕見。 這是 Google 示例的 xml 文件。
<?xml version="1.0" encoding="utf-8"? >
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/camera_capture_button"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginBottom="50dp"
android:scaleType="fitCenter"
android:text="Take Photo"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:elevation="2dp" />
<androidx.camera.view.PreviewView
android:id="@+id/viewFinder"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.