余晖与雨 2024-03-26 22:50 采纳率: 59.6%
浏览 8
已结题

Android 相机预览问题

img

img


如上两图,可看出区别,同等焦距下,全屏模式下图放大了,尽管原相机如此,我们也希望最终效果是不放大的,也就是像最上图4:3的大小,请问有什么方法可以修改吗,相机初始化如下,欢迎给出见解与建议,一定会采纳的


private fun startCamera() {
        // 创建一个用于管理相机生命周期的实例
        val cameraProviderFuture = ProcessCameraProvider.getInstance(this)

        cameraProviderFuture.addListener({
            // 相机提供者可用时执行以下代码

            // 获取相机提供者
            val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get()
            val aspectRatio = Rational(4,3) // 设置宽高比为 3:4

            // 配置相机预览的显示
            val preview = Preview.Builder()
                .setTargetAspectRatio(AspectRatio.RATIO_4_3)
                .build()
                .also {
                    it.setSurfaceProvider(mDatabind.viewFinder.surfaceProvider)
                }
            //不做放大效果  Fit_center中心不变,边边裁剪
            //            Fill_center 尽量填满
//            mDatabind.viewFinder.scaleType = PreviewView.ScaleType.FILL_CENTER
            // 配置图像捕获用于拍照
            imageCapture = ImageCapture.Builder()
                .setTargetAspectRatio(AspectRatio.RATIO_4_3)
                .build()

            // 设置相机的配置
            val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA

            try {
                // 解绑之前绑定的用例
                cameraProvider.unbindAll()

                // 绑定相机用例
                cameraProvider.bindToLifecycle(
                    this, cameraSelector, preview, imageCapture
                )

            } catch (exc: Exception) {
                // 处理相机启动失败的异常
            }

        }, ContextCompat.getMainExecutor(this))
    }
  • 写回答

2条回答 默认 最新

  • 关注

    余晖与雨 晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    根据你提供的代码,你希望相机的预览效果在全屏模式下不放大,并且保持4:3的宽高比。目前的代码使用了Preview用例来显示相机预览,并设置了目标宽高比为4:3,但仍然会出现放大效果。

    要解决这个问题,可以尝试以下方法:

    1. 使用自定义View来显示相机预览,而不是使用Preview用例。这样可以更好地控制预览的尺寸和缩放效果。可以参考以下步骤进行修改:

      • 创建一个自定义的SurfaceView或TextureView来替代PreviewView。
      • 在自定义View中重写onMeasure方法,将宽高设置为4:3的比例。
      • 在自定义View的回调方法中处理相机预览的绘制。

      这样可以确保预览的尺寸按照4:3的比例显示,不会有放大效果。

    2. 修改相机的分辨率。你可以尝试更改相机的输出分辨率,以适应4:3的宽高比。可以使用Camera2 API的相关方法来获取和设置相机的支持分辨率,然后选择一个适合的分辨率。

      • 使用CameraCharacteristics获取相机的输出分辨率列表。
      • 根据需要的宽高比,选择一个最接近的分辨率。
      • 将选中的分辨率设置为相机的输出分辨率。

      这样可以确保相机的输出分辨率和预览的宽高比一致。

    请注意,修改相机的配置可能会对性能和稳定性产生影响。建议在测试阶段进行适当的性能测试和设备兼容性测试。以下是修改代码的示例:

    // 设置相机预览的分辨率和宽高比
    val previewResolution = Size(1280, 960) // 选择一个适当的分辨率
    val previewAspectRatio = Rational(4, 3) // 设置宽高比为 4:3
    
    // 配置相机预览的显示
    val preview = object : SurfaceView(context) {
        override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec)
            val width = measuredWidth
            val height = (width * previewAspectRatio.toFloat()).toInt()
            setMeasuredDimension(width, height)
        }
    }
    
    // 设置预览的分辨率和宽高比
    preview.holder.setFixedSize(previewResolution.width, previewResolution.height)
    

    以上是两种可能的解决方案,你可以根据自己的需求选择其中之一来实现不放大的相机预览。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月2日
  • 创建了问题 3月26日

悬赏问题

  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音
  • ¥30 Pytorch深度学习服务器跑不通问题解决?
  • ¥15 部分客户订单定位有误的问题
  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Bug traq 数据包 大概什么价