이미지뷰에 맞게 사진 로딩하기(회전 보정 추가)

View Comments

안드로이드 프로그래밍 중 사진을 출력할 필요가 있었다. 처음에는 단순 무식하게 이미지뷰에 그냥 사진을 로딩해서 붙여넣었다.
처음에 디자이어 HD로 테스트할 때는 이상없이 잘 출력되었다.
그래서 이상없이 프로그래밍이 된 걸으로 알고 구글 플레이에 퍼블리싱을 했다.

그런데 막내의 넥서스S에서 시험하려고 이미지를 등록하고 화면을 몇 번 전환했더니 바로 프로그램이 죽어버렸다.
왜 그런지 이유를 알 수 없었다.

다음으로 갤럭시 S2에서 시험해봤다. 사진을 등록하고 화면에 표시된 것을 보는 순간...사진이 180도 회전되서 출력이 되는 것이다.

이런...이런...퍼블리싱하기 전에 더 테스트를 해봤어야 되는데...했지만 이미 늦은...

구글링으로 이유를 찾아봤다.

이유는 사진이 너무 커서 메모리를 다 먹어버리니까 강제 종료가 된 것이었다.

사진 크기를 줄이는 방법은 쉽게 찾을 수 있었다.

바로 처리하고, 더불어서 모서리까지 라운드로 처리해서 출력하도록 수정했다(그 소스는 위의 참조 링크 두 번째에 있다).

일단 급한 버그를 수정해서 업그레이드하고나니 사진이 90도, 180도, 270도 회전되서 출력하는 문제가 남았다.

그 것도 이리저리 찾아보니 사진의 EXIF 정보를 읽어서 사진 방향을 보정해야 된단다.

다행히도 위의 참조 링크 첫 번째에 있는 방법으로 처리하니 잘 출력이 된다.

이미지 처리와 관련된 부분만 뽑아서 ImageUtil이란 클래스로 만들고, 메소드는 다 static으로 해서 바로 뽑아쓸 수 있게 만들었다.

아래에 예제 프로젝트 전문을 게재한다. 예제 프로젝트는 화면 가운데에 ImageView를 하나 놓고, ImageView 부분을 누르면 갤러리(또는 사진 보는 프로그램)에서 사진을 불러와서 적절하게 가공해서 ImageView에 표시한다.

main.xml

MyImageViewActivity.java

ImageUtil.java


"프로그래밍" 카테고리의 다른 글

2012/05/01 18:17 2012/05/01 18:17

4 Comments (+add yours?)

트랙백0 Tracbacks (+view to the desc.)

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다

Newer Entries Older Entries