-
[Android] camera2 API - 검은 사진이 찍히는 현상 해결 방법programing/Mobile 2019. 8. 23. 15:48
안녕하세요, Einere입니다.
(ADblock을 꺼주시면 감사하겠습니다.)
증상
조명 외에는 아무것도 보이지 않는 사진 camera2 API를 사용하는 프로젝트가 있는데, 테스트 기기를 LG G5로 바꿔서 테스트해보니 검은 사진이 촬영되는 현상을 발견했습니다.
위 사진이 그 예시인데, 허여멀건 자국들은 다 조명이고, 그 외엔 엄청나게 까맣습니다.
이전 테스트 기기에선 다 정상적으로 작동하여 특정 기종문제인 줄 알았는데, 찾아보니 그런 것 같지는 않았습니다. 심지어 제가 담당한 기능도 아니라서 구글링하고 이해하는데 어려웠습니다. (사실 이해한 건 거의 없지만..)
해결 방법
어찌됫건, 제가 해결한 방법은 fps를 설정하는 법입니다.
// 필드 선언 private Range<Integer> fpsRange;
fpsRange 필드를 선언해줍니다.
// fpsRange 초기화 CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); try { Range<Integer>[] ranges = characteristics.get(CameraCharacteristics.CONTROL_AE_AVAILABLE_TARGET_FPS_RANGES); if(ranges != null) { for (Range<Integer> range : ranges) { int upper = range.getUpper(); Log.i(TAG, "[FPS Range Available]:" + range); if (upper >= 10) { if (fpsRange == null || upper < fpsRange.getUpper()) fpsRange = range; } } } } catch (Exception e) { e.printStackTrace(); } Log.i(TAG, "[FPS Range] is:" + fpsRange);
카메라를 open하는 함수 내에서, 위와 같이 fpsRange를 설정해줍니다.
// 카메라 프리뷰 생성 함수 captureRequestBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); ... captureRequestBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, fpsRange);
카메라 프리뷰를 생성하는 함수 내에서, 위와 같이 fps range설정을 해줍니다.
// 사진 찍는 함수 final CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_STILL_CAPTURE); captureBuilder.addTarget(reader.getSurface()); captureBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO); captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_ON); captureBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CaptureRequest.CONTROL_AWB_MODE_AUTO); captureBuilder.set(CaptureRequest.CONTROL_AE_TARGET_FPS_RANGE, fpsRange);
사진을 찍는 함수 내에서, 위와 같이 fps range 설정을 해줍니다.
결과
정상적인 사진 정상적으로 사진이 찍혔습니다.
참고
Pictures with Camera2 API are really dark
I'm working on Android and I'm trying to capture a picture without displaying any preview. I tried to simplify the process by making a class. It's working but all the pictures are really really dark.
stackoverflow.com
'programing > Mobile' 카테고리의 다른 글
[React Native] 개발 웹서버 없이 debug APK 따는 방법 (0) 2020.11.27 [React Native] Insight (0) 2020.10.24 [Android] background theme를 이용한 splash screen (0) 2019.05.12 [Android] Base64를 이용한 encoding시 주의점 (1) 2019.04.01 [Android Studio] 협업과 Instant Run 관련 에러 해결 방법 (0) 2019.03.30 댓글