繁体   English   中英

Android studio 如何在 CameraX 中添加设置缩放 function

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM