안드로이드 개발 중 카메라로 사진을 찍은 뒤에 Crop기능까지 하는 프로젝트를 진행했습니다.
카메라로 찍은 사진을 Bitmap으로 직접 가져오니 선명도 정도 차이가 아니라 내가 찍은 사진이
마인크래프트처럼 저급 화질로 변환되서 반환되는 문제가 생겼습니다.
이문제는 카메라 Data를 직접 가져올때 발생하는데 이미지 용량이 크다 보니 Data에 다 못 담는 것으로 보입니다.
여러 가지 방법을 찾아보다가 카메라로 찍은 사진을 Intent를 이용해서 받아오면
고화질로 받을 수 있다는 사실을 발견하고 코드에 바로 적용하였습니다.
먼저 Activity는 MainActivity 하나만을 가지고 구현하도록 하겠습니다.
안드로이드 버전이 올라가면서 한 가지 정책상 바뀐 점이 있는데 바로 저장소를
접근할 때 직접적인 접근을 하지 못하고 provider의 도움을 받아야 한다는 점입니다.
먼저 AndroidManifest.xml 파일에 application구문 내에 아래 provider를 추가해줍니다.
자 그런다음 xml파일로 path를 선언해 줍니다.
res폴더 하위에 xml이라는 폴더가 있으신 분들은 xml폴더 내에 filepaths.xml이란 이름으로
파일을 하나 생성해줍니다.
만약에 xml폴더가 없으신 분들은 아래 그림처럼 생성해줍니다.
이렇게 filepaths.xml 파일을 생성하셨으면 내용을 입력해 주어야 합니다.
자 여기까지 하셨으면 카메라를 통해 이미지를 고화질로 읽어오기 위한 전초작업은 끝났습니다.
저는 MainActivity.class에 Button을 하나 추가하여 Onclick이벤트 발생 시에 카메라를 실행시키도록 하겠습니다.
간단하게 설명하면 카메라를 실행 할 때 이미지의 Path를 같이 보내줍니다.
카메라로 촬영된 이미지를 저장하고 그 저장된 Path를 통해 activityresult 쪽에서
읽어오는 방식으로 이미지 자체를 바로 받지는 않지만 고화질로 받아올 수 있습니다.
여기까지 구현됐으면 마지막으로 이미지를 받아와서 처리할 부분을 작성해 주면 됩니다.
이렇게 onActivityResult함수에서 사진이 찍히면 호출이 되고
그때 위에서 저장된 Path를 통해 file을 읽어오게 됩니다.
저는 여기에서 Crop기능을 추가해서 화면을 바로 넘겼습니다.
이 구문 내에서 file을 외부 저장 디렉터리에 저장할 수도 있고
원하는 로직을 추가해서 사용하시면 됩니다.
'안드로이드' 카테고리의 다른 글
[Android] NFC란? (0) | 2021.10.08 |
---|---|
[Android] Http 통신 (0) | 2021.10.07 |
[Android] Application 사용 가능 기간 구현 (0) | 2021.08.18 |
[Android] Bluetooth Le Auto Connection 구현 (0) | 2021.08.18 |
[Android] Android Bluetooth Scan 안되는 문제 해결 (0) | 2021.08.18 |
댓글