모든 프로그램에서 이미지 관리의 기본은 비트맵이다. 안드로이드에서도 마찬가지로
이미지 관리와 표현을 위해서는 비트맵을 익히는게 가장 기본이다. 그 비트맵 관련
내용들을 소개한다.
안드로이드에서 비트맵 관련 클래스는 android.graphics.Bitmap 이다. 그래픽 관련
클래스들은 android.graphics 패키지에 있으며 여기에 포함된 것이다.
그리고 객체 Factory 관리를 위한 BitmapFactory 클래스가 있다. BitmapFactory 는
여러가지 이미지 포맷을 decode 해서 bitmap 으로 변환하는 함수들로 되어있는데
그 이름들은 decodeXXX 로 되어있어서 쉽게 원하는 기능의 함수를 찾을수 있을
것이다.
(1) BitmapFactory 에서 주로 사용하고 있는 함수와 옵션에 대한 설명 | BitmapFactory.decodeByteArray() : Camera.PictureCallBack 으로부터 받은 Jpeg 사진
데이터를 가지고 Bitmap 으로 만들어 줄 때 많이 사용한다.
Camera.PictureCallback 에서 들어오는 데이터가 byte[] 배열로 들어오기 때문이다.
BitmapFactory.decodeFile() : 로컬에 존재하는 파일을 그대로 읽어올 때 쓴다. 파일경로를 파라미터로 넘겨주면 FileInputStream 을 만들어서 decodeStream 을 한다.
1 | Bitmap orgImage = BitmapFactory.decodeFile(“/sdcard/test.jpg”);
|
BitmapFactory.decodeResource() : Resource 폴더에 저장된 그림파일을 Bitmap 으로 만들어 리턴해준다 1 2 | Bitmap orgImage =
BitmapFactory.decodeResource(getResources(), R.drawable.test02);
|
BitmapFactory.decodeStream() : InputStream 으로부터 Bitmap 을 만들어 준다.
BitmapFactory.Options : BitmapFactory 가 사용하는 옵션클래스이다. Options 객체를 생성하고
설정하고자 하는 옵션을 넣은후 BitmapFactory 의 함수 실행시 파라미터로 넘기면된다.
inSampleSize : decode 시 얼마나 줄일지 설정하는 옵션인데 1보다 작을때는 1이 된다. 1보다 큰값일 때 1/N 만큼 이미지를 줄여서 decoding 하게 된다. 보통 2의 배수로 설정한다.1 2 3 | BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap orgImage = BitmapFactory.decodeFile(“/sdcard/test.jpg”, options);
|
(2) Bitmap 과 BitmapFactory 을 사용한 여러가지 예제 | BitmapFactory 로 이미지를 읽어온뒤 Bitmap.createScaledBitmap() 사용해서 크기를 재조정
할수 있다. 하지만 예를 들어 크기를 일정하게 2, 4 배등으로 줄일거면 굳이 createScaledBitmap
을 사용하지 않고 위에서 설명한 BitmapFactory.Options 의 inSampleSize 를 사용하면 된다.
아래는 SD 카드에서 이미지를 불러와 Bitmap 을 원하는 크기 만큼 줄인 예제이다. 1 2 | Bitmap orgImage = BitmapFactory.decodeFile(“/sdcard/test.jpg”);
Bitmap resize = Bitmap.createScaledBitmap(orgImage, 300, 400, true );
|
다음은 BitmapFactory.Options 사용해서 이미지를 4배로 줄인것인데 createScaledBitmap 을
사용해서 용량을 줄인 이미지에 다시 입력한 크기만큼 가로, 세로 크기를 줄인 것이 된다. 1 2 3 4 | BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;
Bitmap orgImage = BitmapFactory.decodeFile(“/sdcard/test.jpg”, options);
Bitmap resize = Bitmap.createScaledBitmap(orgImage, 300, 400, true );
|
출처: https://mainia.tistory.com/468 [녹두장군 - 상상을 현실로] |