簡體   English   中英

ImageCapture cameraX 方向檢測何時鎖定

[英]ImageCapture cameraX orientation detect when is locked

我想使用 CameraX 庫捕獲圖像和視頻。 通過遵循文檔,我可以毫無問題地實現預覽和捕獲用例。 我使用的代碼如下。

    private fun startCamera() {
        cameraProviderFuture = ProcessCameraProvider.getInstance(this)
        cameraProviderFuture.addListener({ setUpCamera() }, cameraExecutor)
    }

    private fun setUpCamera() {
        cameraProvider = cameraProviderFuture.get()
        bindPreview()
    }

    private fun bindPreview() {
        preview = Preview.Builder().build().also {
            it.setSurfaceProvider(binding.cameraPreview.surfaceProvider)
        }

        imageCapture = ImageCapture.Builder()
            .setFlashMode(flashMode)
            .setCaptureMode(CAPTURE_MODE_MAXIMIZE_QUALITY)
            .build()

        videoCapture = ...

        bindCamera()
    }

    private fun bindCamera() {
        cameraSelector = selectExternalOrBestCamera()
        cameraProvider.unbindAll()
        camera = cameraProvider.bindToLifecycle(this, cameraSelector, preview, imageCapture, videoCapture)

現在,假設我已經從菜單面板鎖定了我的設備方向。 因此,如果我旋轉設備,應用程序根本不會旋轉。 在這種情況下,如果捕獲圖像,我保存並要發送到服務器的捕獲圖像旋轉 90 度,這是合理的,因為我旋轉了設備並拍攝了照片。 正如我所看到的,在其他應用程序(如 Whatsapp)中,不會發生相同的情況,因為它們顯示在捕獲后正確旋轉的預覽圖像。 我該如何解決這個問題?

所以最后我找到了解決方案。

val rotation = display?.rotation ?: Surface.ROTATION_0
        val isLandscape = rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270
        imageCapture = ImageCapture.Builder()
            .setFlashMode(flashMode)
            .setCaptureMode(CAPTURE_MODE_MAXIMIZE_QUALITY)
            .setTargetRotation(rotation)
            .setTargetResolution(
                if (isLandscape)
                    Size(1920, 1080)
                else
                    Size(1080, 1920)
            )
            .build()

這給了我以所需方向捕獲的預覽圖像

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM