![](/img/trans.png)
[英]Find out if device orientation is locked (Detect if auto-rotate is enabled/disabled)
[英]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.