프로그래밍/안드로이드

[안드로이드]비트맵 이미지 리사이징

Stone_Head 2012. 3. 31. 00:48

 

 

안드로이드 개발 시 비트맵을 canvas에 뿌려야 할 때가 있습니다

최근에 게임을 구현하는데 openGL을 사용하지 않고 비트맵으로 열어서 canvas에 뿌리는 식으로 구현을 했었습니다

다음과 같이 미리 비트맵을 열어놓고 사용할 때 마다 화면에 뿌리는 형식으로 하였습니다

public Bitmap untocLogo = ((BitmapDrawable)r.getDrawable(R.drawable.untoc_logo)).getBitmap();

 

그런데 제 폰에서는 속도도 어느정도 나와서 몰랐는데 다른 기기에서는 많은 이미지를 뿌려주는데

너무 느려지는 현상이 있었습니다

특히 갤럭시 노트 같은 큰 화면에서는 더더욱 느려지더군요

 

그래서 찾아본게 리사이징 입니다

이미지는 해상도 때문에 약간 크게 만들거나 하는데 이 이미지의 크기가 뿌려주는 크기와 맞지 않으면

계산하는데 오래 걸리는 가 봅니다

 

그래서 이미지를 미리 화면에 뿌릴 크기로 지정을 해서 열어서 계산을 줄여서 속도를 올리는 거죠

함수는 Bitmap.createScaledBitmap 을 사용합니다

 

예제는 다음과 같습니다

public Bitmap untocLogo = Bitmap.createScaledBitmap(((BitmapDrawable)r.getDrawable(R.drawable.untoc_logo)).getBitmap() , 가로크기, 세로크기 , true);

함수안에 기존에 연 비트맵의 소스를 넣고 가로크기와 세로크기를 지정합니다

마지막 인자는 안티앨리어싱의 여부입니다

true로 하는게 보기 좋겠죠

 

같은 이미지를 여러번 뿌려야 하는 제 어플에서는 확연한 속도차이가 나는걸 알 수 있었습니다

그러므로 이미지를 뿌리는 크기가 고정되어있다면 리사이징을 해놓는게 속도면에서 유리하겠죠~