(안드로이드) Bitmap 구현,관리하기

안드로이드에서 비트맵 관련 클래스는 android.graphics.Bitmap이다. 그래픽 관련 클래스들은 android.graphics패키지에 있으며 여기에 포함된 것이다.

그리고 객체 Factory관리를 위한 BitmapFactory클래스가 있다. BitmapFactory는 여러가지 이미지 포맷을 decode해서 bitmap으로 변환하는 함수들로 되어있는데, 그 이름들은decodeXXX로 되어있어서 쉽게 원하는 기능의 함수를 찾을수 있을 것이다.



(1) BitmapFactory에서 주로 사용하고 있는함수와 옵션에 대한 설명


BitmapFactory.decodeFile(): 로컬에 존재하는 파일을 그대로 읽어올 때 쓴다. 파일 경로를 파라미터로 넘겨주면 FileInputStream을 만들어서 decodeStream을 한다.

 ex) Bitmap orgImage=BitmapFactory.decodeFile("/sdcard/test.jpg");

BitmapFactory.decodeResource(): Resource폴더에 저장된 그림파일을 Bitmap으로 만들어 리턴해준다.

ex) 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의 배수로 설정한다.

ex) BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize=4;
Bitmap orgImage=BitmapFactory.decodeFile("/sdcard/test.jpg",options);


<Bitmap과 BitmapFactory을 사용한 여러가지 예제>


BitmapFactory로 이미지를 읽어온 뒤 Bitmap.createScaledBitmap()사용해서 크기를 재조정 할 수 있다. 하지만 예를들어 크기를 일정하게 2,4배등으로 줄일거면 굳이 createScaledBitmap()을 사용하지 않고 위에서 설명한 BitmapFactory.Options의 inSampleSize를 사용하면된다. 

아래는 SD카드에서 이미지를불러와 Bitmap을원하는 크기 만큼 줄인 예제이다.
ex)
Bitmap orgImage=BitmapFactory.decodeFile("/sdcard/test.jpg");
Bitmap resize=Bitmap.createScaledBitmap(orgImage,300,400,true);

다음은 BitmapFactory.Options사용해서 이미지를 4배로 줄인것인데, createScaledBitmap 을 사용해서 용량을 줄인 이미지에 다시 입력한 크기만큼 가로, 세로 크기를 줄인것이된다.

ex)
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);




댓글

이 블로그의 인기 게시물

(18장) WebSocekt과 STOMP를 사용하여 메시징하기

(네트워크)폴링방식 vs 롱 폴링방식

(ElasticSearch) 결과에서 순서 정렬