메뉴 건너뛰기

조회 수 7658 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

안드로이드에서 단말기 내부의 사진을 ImageView 등에 출력할 때, 
이미지가 가로 방향인지 세로 방향인지 체크해서 적절하게 회전시켜서 보여주는 함수입니다.


이미지의 Orientation 정보를 얻는 함수입니다.

01.public synchronized static int GetExifOrientation(String filepath)
02.{
03.    int degree = 0;
04.    ExifInterface exif = null;
05.     
06.    try
07.    {
08.        exif = new ExifInterface(filepath);
09.    }
10.    catch (IOException e)
11.    {
12.        Log.e(TAG, "cannot read exif");
13.        e.printStackTrace();
14.    }
15.     
16.    if (exif != null)
17.    {
18.        int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
19.         
20.        if (orientation != -1)
21.        {
22.            // We only recognize a subset of orientation tag values.
23.            switch(orientation)
24.            {
25.                case ExifInterface.ORIENTATION_ROTATE_90:
26.                    degree = 90;
27.                    break;
28.                     
29.                case ExifInterface.ORIENTATION_ROTATE_180:
30.                    degree = 180;
31.                    break;
32.                     
33.                case ExifInterface.ORIENTATION_ROTATE_270:
34.                    degree = 270;
35.                    break;
36.            }
37. 
38.        }
39.    }
40.     
41.    return degree;
42.}



이미지를 특정 각도로 회전하는 함수입니다.

01.public synchronized static Bitmap GetRotatedBitmap(Bitmap bitmap, int degrees)
02.{
03.    if ( degrees != 0 && bitmap != null )
04.    {
05.        Matrix m = new Matrix();
06.        m.setRotate(degrees, (float) bitmap.getWidth() / 2, (float) bitmap.getHeight() / 2 );
07.        try
08.        {
09.            Bitmap b2 = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), m, true);
10.            if (bitmap != b2)
11.            {
12.                bitmap.recycle();
13.                bitmap = b2;
14.            }
15.        }
16.        catch (OutOfMemoryError ex)
17.        {
18.            // We have no memory to rotate. Return the original bitmap.
19.        }
20.    }
21.     
22.    return bitmap;
23.}



이미지를 불러오는 함수입니다.

01.public synchronized static Bitmap SafeDecodeBitmapFile(String strFilePath)
02.{
03.    DEBUG.SHOW_DEBUG(TAG, "[ImageDownloader] SafeDecodeBitmapFile : " + strFilePath);
04.     
05.    try
06.    {
07.        File file = new File(strFilePath);
08.        if (file.exists() == false)
09.        {
10.            DEBUG.SHOW_ERROR(TAG, "[ImageDownloader] SafeDecodeBitmapFile : File does not exist !!");
11.             
12.            return null;
13.        }
14.         
15.        // Max image size
16.        final int IMAGE_MAX_SIZE    = GlobalConstants.getMaxImagePixelSize();   
17.        BitmapFactory.Options bfo   = new BitmapFactory.Options();
18.        bfo.inJustDecodeBounds      = true;
19.         
20.        BitmapFactory.decodeFile(strFilePath, bfo);
21.         
22.        if(bfo.outHeight * bfo.outWidth >= IMAGE_MAX_SIZE * IMAGE_MAX_SIZE)
23.        {
24.            bfo.inSampleSize = (int)Math.pow(2, (int)Math.round(Math.log(IMAGE_MAX_SIZE
25.                                / (double) Math.max(bfo.outHeight, bfo.outWidth)) / Math.log(0.5)));
26.        }
27.        bfo.inJustDecodeBounds = false;
28.        bfo.inPurgeable = true;
29.        bfo.inDither = true;
30.         
31.        final Bitmap bitmap = BitmapFactory.decodeFile(strFilePath, bfo);
32.         
33.        int degree = GetExifOrientation(strFilePath);
34.         
35.        return GetRotatedBitmap(bitmap, degree);
36.    }
37.    catch(OutOfMemoryError ex)
38.    {
39.        ex.printStackTrace();
40.         
41.        return null;
42.    }
43.}

List of Articles
번호 제목 날짜 조회 수
37 Effects - SlideUp() 메서드 (슬라이드업) file 2014.10.16 6001
36 Effects - SlideToggle() 메서드 (슬라이드 업/다운) file 2014.10.16 6761
35 Effects - Animate() 메서드 (여러가지 효과 동시 처리) file 2014.10.16 30719
34 Effects - Stop() 메서드 (애니메이션 효과 멈추기) file 2014.10.16 6225
33 트리뷰(TreeView) 컨트롤 file 2014.10.16 6722
32 jQuery Ajax - jQuery.load() 메서드 (동적으로 원격 페이지 로드) file 2014.10.16 6417
31 JSON(JavaScript Object Notation) - jQuery Ajax - jQuery.getJSON() 메서드 (비동기적으로 JSON파일 로드) file 2014.10.16 6568
30 jQuery ajax post 요청 text 응답 2014.10.16 6702
29 HTML5 Geolocation (구글 지도에 현위치 표시하기) file 2014.09.04 6810
28 HTML5 Better semantic tags file 2014.09.04 5952
27 HTML5로 게임 만들기 워밍업 file 2014.09.04 6063
26 HTML5 Form 공부하기 -2- file 2014.09.04 6329
25 HTML5 Form 공부하기 -1- file 2014.09.04 5841
24 HTML5 Web Storage -01- file 2014.09.04 5587
23 HTML5 드래그 앤 드롭 하기 Drag and Drop file 2014.09.04 7748
22 HTML5로 나만의 비디오 플레이어 스킨 만들기 -3- JavaScript file 2014.09.04 6288
21 HTML5로 나만의 비디오 플레이어 스킨 만들기 -2- JavaScript file 2014.09.04 6312
20 HTML5로 나만의 비디오 플레이어 스킨 만들기 -1- CSS file 2014.09.04 6453
19 HTML5로 비디오 보여주기 Video Tag file 2014.09.04 7062
18 JavaScript 맛보기 file 2014.09.04 6589
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved