如何使用Android CameraX库缩放预览?

3

我希望能够给https://github.com/android/camera/tree/master/CameraXBasic的示例代码中添加一个放大预览图片(请参见图像A)的功能。

我已经阅读了这篇文章,但以下代码无法工作。如何使用CameraX API 1.0.0-alpha05缩放预览?

CameraFragment.kt

 /** Declare and bind preview, capture and analysis use cases */
    private fun bindCameraUseCases() {

       ...

        // Apply declared configs to CameraX using the same lifecycle owner
        CameraX.bindToLifecycle(
                viewLifecycleOwner, preview, imageCapture, imageAnalyzer)

       //I added code
        var my=Rect(0,0,500,500)
        preview.zoom(my)
    }

图片 A

输入图像描述


(注:该内容为HTML标记语言,已被机器翻译为中文)

你尝试过在真实设备上测试吗? - Natig Babayev
是的,我在真实设备上尝试过。 - HelloCW
可能是如何使用Android CameraX API缩放相机?的重复问题。 - Patel Pinkal
1个回答

4

@HelloCW,你做得很对,我能够使用这段代码进行缩放

button_plus.setOnClickListener {
    if (right < 100) {
        right += 100
        bottom += 100
        left += 100
        top += 100
        val my = Rect(left, top, right, bottom)
        preview.zoom(my)
    }
}

button_minus.setOnClickListener {
    if (right > 0) {
        right -= 100
        bottom -= 100
        left -= 100
        top -= 100
        val my = Rect(left, top, right, bottom)
        preview.zoom(my)
    }
}

这里是输出结果: 这里输入图片描述

这里输入图片描述

更新:
 private fun startCamera() {
        val metrics = DisplayMetrics().also { view_finder.display.getRealMetrics(it) }
        val screenAspectRatio = Rational(metrics.widthPixels, metrics.heightPixels)
        val previewConfig = PreviewConfig.Builder().apply {
            setTargetAspectRatio(screenAspectRatio)
            setTargetRotation(view_finder.display.rotation)
        }.build()
        // Build the viewfinder use case
        preview = Preview(previewConfig)
        preview.setOnPreviewOutputUpdateListener {
            // To update the SurfaceTexture, we have to remove it and re-add it
            val parent = view_finder.parent as ViewGroup
            parent.removeView(view_finder)
            parent.addView(view_finder, 0)
            view_finder.surfaceTexture = it.surfaceTexture
            updateTransform()
        }
        CameraX.bindToLifecycle(this, preview)
    }

谢谢,你可以发布你的完整代码吗?这样我就可以测试它。 - HelloCW
非常感谢,但我仍然无法运行您的项目,您能否发布您的完整代码? - HelloCW
我利用这个网站(https://codelabs.developers.google.com/codelabs/camerax-getting-started/#0)准备了一个演示,并添加了额外的两个按钮来实现放大/缩小功能。 - Akshay Raiyani
谢谢,你能把你的项目发布到Git上吗?或者上传到Dropbox,这样我就可以下载并测试它了吗? - HelloCW
实际上我的演示现在还没有完成,我正在努力工作,想要更深入地探索CameraX。所以当它完成后,我会将其上传到Git并通知您。还有一件事,从您的端创建一个演示非常简单,只需按照codelabs中提到的步骤,在XML中放置两个按钮并执行上面提到的点击监听器。只需尝试一次即可。 - Akshay Raiyani
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接