[英]Android studio How to add set Zoom function in CameraX
我在 Android 工作室中找到了使用 CameraX 的源代碼。 但它效果不佳,因為它沒有焦點 function 所以我的照片總是失焦。 我在網上搜索過,但是由於我這幾天才學習Android Studio,所以不太明白如何將他們的代碼轉換成我的代碼。 總結一下,我想添加放大和縮小 function 但我不知道該怎么做,有人可以幫我嗎? 請~
public abstract class AbstractCameraXActivity<R> extends BaseModuleActivity {
private static final int REQUEST_CODE_CAMERA_PERMISSION = 200;
private static final String[] PERMISSIONS = {Manifest.permission.CAMERA};
private long mLastAnalysisResultTime;
protected abstract int getContentViewLayoutId();
protected abstract TextureView getCameraPreviewTextureView();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getContentViewLayoutId());
startBackgroundThread();
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
this,
PERMISSIONS,
REQUEST_CODE_CAMERA_PERMISSION);
} else {
setupCameraX();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == REQUEST_CODE_CAMERA_PERMISSION) {
if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
Toast.makeText(
this,
"You can't use object detection example without granting CAMERA permission",
Toast.LENGTH_LONG)
.show();
finish();
} else {
setupCameraX();
}
}
}
private void setupCameraX() {
final TextureView textureView = getCameraPreviewTextureView();
final PreviewConfig previewConfig = new PreviewConfig.Builder().build();
final Preview preview = new Preview(previewConfig);
preview.setOnPreviewOutputUpdateListener(output -> textureView.setSurfaceTexture(output.getSurfaceTexture()));
final ImageAnalysisConfig imageAnalysisConfig =
new ImageAnalysisConfig.Builder().setTargetResolution(new Size(1024, 1024))
.setCallbackHandler(mBackgroundHandler)
.setCallbackHandler(mBackgroundHandler)
.setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)
.build();
final ImageAnalysis imageAnalysis = new ImageAnalysis(imageAnalysisConfig);
imageAnalysis.setAnalyzer((image, rotationDegrees) -> {
if (SystemClock.elapsedRealtime() - mLastAnalysisResultTime < 500) {
return;
}
final R result = analyzeImage(image, rotationDegrees);
if (result != null) {
mLastAnalysisResultTime = SystemClock.elapsedRealtime();
runOnUiThread(() -> applyToUiAnalyzeImageResult(result));
}
});
CameraX.bindToLifecycle(this, preview, imageAnalysis);
}
protected abstract R analyzeImage(ImageProxy image, int rotationDegrees);
protected abstract void applyToUiAnalyzeImageResult(R result);
} '''
我建議使用PreviewView / CameraController API。 它是一個高級 API,可以為您處理許多低級細節,包括縮放/對焦。 示例代碼:
PreviewView previewView = view.findViewById(R.id.preview_view);
LifecycleCameraController cameraController = new LifecycleCameraController(requireContext());
previewView.setController(cameraController);
cameraController.bindToLifecycle(getViewLifecycleOwner())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.