올해는 머신러닝이다.
Android 카메라 줌 관련 정리 본문
안드로이드에서 카메라 라이브러리를 사용할 때 광학 줌(Optical Zoom) 또는 디지털 줌(Digital Zoom) 을 활용하여 더 멀리 보는 기능을 구현할 수 있습니다. 다만, 하드웨어적으로 지원되는 카메라 모듈(예: 망원 렌즈)이 있는지 여부에 따라 방법이 달라집니다.
1. 카메라 렌즈 변경 (망원 렌즈 사용)
안드로이드 Camera2 API 또는 CameraX를 사용하면 여러 개의 렌즈(예: 초광각, 기본, 망원)를 선택할 수 있습니다. 망원 렌즈를 사용하면 더 먼 거리의 물체를 촬영할 수 있습니다.
✅ Camera2 API를 사용하여 망원 렌즈 선택
val cameraManager = getSystemService(Context.CAMERA_SERVICE) as CameraManager
for (cameraId in cameraManager.cameraIdList) {
val characteristics = cameraManager.getCameraCharacteristics(cameraId)
val lensFacing = characteristics.get(CameraCharacteristics.LENS_FACING)
// 망원 렌즈 (TELEPHOTO) 찾기
val focalLengths = characteristics.get(CameraCharacteristics.LENS_INFO_AVAILABLE_FOCAL_LENGTHS)
if (lensFacing == CameraCharacteristics.LENS_FACING_BACK && focalLengths != null && focalLengths.any { it > 50 }) {
Log.d("Camera", "망원 렌즈 ID: $cameraId")
selectedCameraId = cameraId
}
}
설명:
- LENS_INFO_AVAILABLE_FOCAL_LENGTHS 값을 확인하여 초점 거리가 긴(예: 50mm 이상) 카메라를 찾아야 합니다.
- 보통 스마트폰에서는 ultra-wide(초광각), wide(일반), telephoto(망원)의 렌즈를 갖고 있으며, 제조사에 따라 지원 여부가 다릅니다.
2. 디지털 줌 활용하기
망원 렌즈가 없을 경우 디지털 줌을 이용하여 더 멀리 보는 효과를 낼 수 있습니다.
✅ Camera2 API에서 디지털 줌 적용
val cameraCharacteristics = cameraManager.getCameraCharacteristics(selectedCameraId)
val maxZoom = cameraCharacteristics.get(CameraCharacteristics.SCALER_AVAILABLE_MAX_DIGITAL_ZOOM) ?: 1f
// 줌 적용 (최대 줌의 2배까지만 설정)
val zoomLevel = min(2.0f, maxZoom)
val sensorRect = cameraCharacteristics.get(CameraCharacteristics.SENSOR_INFO_ACTIVE_ARRAY_SIZE)
val cropWidth = (sensorRect!!.width() / zoomLevel).toInt()
val cropHeight = (sensorRect.height() / zoomLevel).toInt()
val cropRegion = Rect(
(sensorRect.centerX() - cropWidth / 2),
(sensorRect.centerY() - cropHeight / 2),
(sensorRect.centerX() + cropWidth / 2),
(sensorRect.centerY() + cropHeight / 2)
)
captureRequestBuilder.set(CaptureRequest.SCALER_CROP_REGION, cropRegion)
설명:
- SCALER_CROP_REGION을 설정하여 센서에서 크롭한 영역을 확대하는 방식으로 디지털 줌을 구현합니다.
- SCALER_AVAILABLE_MAX_DIGITAL_ZOOM 값을 확인하여 디지털 줌의 최대 배율을 결정할 수 있습니다.
3. CameraX에서 줌 적용
CameraX를 사용하는 경우, setZoomRatio() 메서드를 활용하면 간편하게 줌을 조절할 수 있습니다.
✅ CameraX의 줌 기능 적용
camera.cameraControl.setZoomRatio(2.0f) // 2배 줌 적용
설명:
- setZoomRatio()를 통해 쉽게 줌을 설정할 수 있으며, 망원 렌즈가 있으면 자동으로 활용됩니다.
4. 결론
✔ 망원 렌즈가 있는 경우: Camera2 API에서 해당 렌즈를 선택하여 사용.
✔ 망원 렌즈가 없는 경우: Camera2 또는 CameraX에서 디지털 줌 적용 가능.
✔ CameraX 사용 시: setZoomRatio() 메서드 활용하면 쉽게 줌 조절 가능.
추가로 사용하려는 기기에서 지원하는 카메라 모듈 정보를 확인한 후 적용하는 것이 중요합니다! 🚀
'스터디 > Android' 카테고리의 다른 글
Android 스크린샷 adb를 통해서 가져오기 (0) | 2018.10.31 |
---|---|
[Android] 배달앱 클론 3주차 수업 정리 (0) | 2018.10.21 |
[Android] 배달앱 클론 스터디 2주차 (0) | 2018.10.14 |
Android Webview FileUpload os별 설정 (0) | 2018.10.10 |
[Android] 배달앱 클론 스터디 1주차 (0) | 2018.10.10 |