Как исправить поворот захваченного изображения для CameraX? - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь использовать новый API CameraX, и я получаю эту ошибку: Когда я снимаю изображение, это изображение сохраняется с неправильным вращением. Например, я делаю снимок в портретной ориентации, но получаю изображение в альбомной ориентации.

Вот мой код:

private fun startCamera() {
    val previewConfig = PreviewConfig.Builder().apply {
        setTargetResolution(Size(textureView.width, textureView.height))
        setTargetRotation(textureView.display.rotation)
    }.build()

    val imageCaptureConfig = ImageCaptureConfig.Builder().apply {
        setCaptureMode(CaptureMode.MIN_LATENCY)
        setTargetAspectRatio(RATIO_4_3)
        setTargetRotation(textureView.display.rotation)
    }.build()
    imageCapture = ImageCapture(imageCaptureConfig)

    val preview = Preview(previewConfig)
    preview.setOnPreviewOutputUpdateListener { previewOutput ->
        removeView(textureView)
        addViewMatchParent(textureView, position = 0)
        textureView.surfaceTexture = previewOutput.surfaceTexture
        textureView.updateTransformForCameraFinderView()
    }
    (context as? LifecycleOwner)?.let { lifecycleOwner ->
        CameraX.bindToLifecycle(lifecycleOwner, preview, imageCapture)
    }
}

private fun capturePhoto() {
    tempImageFile = generateTmpFile(false)
    val executor = Executor { it.run() }
    imageCapture.takePicture(tempImageFile!!, executor, object : OnImageSavedListener {
        override fun onError(error: ImageCaptureError, message: String, exc: Throwable?) {
            exc?.printStackTrace()
        }

        override fun onImageSaved(photoFile: File) {
            post {
                // load image into ImageView by Glide
                showCapturedPhotoPreview(photoFile)
            }
        }
    })
}

Пожалуйста, дайте мне совет, как я могу это исправить?

PS Я пытался найти решение, поэтому не копируйте и не вставляйте сначала что-то похожее)

Обновление: Я попытался сделать CameraView как в это образец но в их случае все работает, по моему - нет)

1 Ответ

0 голосов
/ 07 ноября 2019

Попробуйте:

    val imageCaptureConfig = ImageCaptureConfig.Builder().apply {
        setCaptureMode(CaptureMode.MIN_LATENCY)
        setTargetAspectRatio(RATIO_4_3)
        // play with this line!
        setTargetRotation(Surface.ROTATION_0)
        setTargetRotation(textureView.display.rotation)
    }.build()

Я выбираю строку, которая снова решает мою проблему:

setTargetRotation(Surface.ROTATION_0)
...