메뉴 건너뛰기

조회 수 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
번호 제목 날짜 조회 수
97 안드로이드 - 액티비티(Activity)와 액티비티 생명 주기(Activity Life Cycle) file 2021.04.01 225
96 안드로이드 - 에디트텍스트(EditText) 사용법 정리 file 2021.03.29 2758
95 안드로이드 - 옵션 메뉴 (Option Menu) 구현 방법 file 2021.04.01 283
94 안드로이드 - 익명 클래스(Anonymous Class) 사용법 file 2021.03.31 281
93 안드로이드 - 인텐트(Intent)를 활용한 액티비티(Activity) 생성 및 실행하기 file 2021.03.31 213
92 안드로이드 - 인텐트(Intent)를 활용한 액티비티(Activity)간 데이터 전달하기 file 2021.03.31 349
91 안드로이드 - 커스텀 폰트(Custom Font) 적용하기 file 2021.04.02 344
90 안드로이드 - 컨텍스트 메뉴(Context Menu) 사용 예제 file 2021.04.01 207
89 안드로이드 - 타이머(Timer) 구현하기 2021.04.01 1369
88 안드로이드 - 텍스트뷰(TextView) 사용법 정리 file 2021.03.31 1254
87 안드로이드 - 토스트(Toast) 메시지 사용하기. file 2021.03.31 325
86 안드로이드 - 툴바(ToolBar)를 사용하여 앱바(App Bar) 구현하기 file 2021.04.01 455
85 안드로이드 - 프래그먼트 (Fragment) 사용하기 file 2021.04.02 486
84 안드로이드 - 프레임레이아웃 (FrameLayout) file 2021.03.29 517
83 안드로이드 - 프로그레스바(ProgressBar) 구현하기 file 2021.04.01 451
82 안드로이드 - 플로팅 액션 버튼(Floating Action Button) 사용법 file 2021.04.02 971
81 안드로이드 android 개발 와이파이 유지 관련 2015.07.16 7034
80 안드로이드 arrayList 를 Json으로 변환 / jsonarry file 2021.03.29 326
79 안드로이드 EditText 필터링 검색 file 2015.12.14 7686
78 안드로이드 EditText 필터링 검색 구현(adapter.getFilter().filter(cs)) file 2015.12.14 8774
Board Pagination Prev 1 ... 4 5 6 7 8 9 10 11 12 13 Next
/ 13

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved