2012년 3월 20일 화요일

[안드로이드] animation 리소스의 특정 프레임을 Bitmap으로 바꾸는 법

android.R.drawable.stat_sys_upload
이녀석은 움직이는 이미지다.
따라서 다음과 같이 하면 null값이 리턴되는데...
Resources res = ctx.getResources();
Bitmap bmpOneFrame = BitmapFactory.decodeResource(res, 
                                                android.R.drawable.stat_sys_upload);
그럼 움직이는 이미지의 특정 프레임을 Bitmap으로 얻어 오려면 어떻게 해야 할까?

1. 먼저 움직이는 이미지의 리소스 ID로 AnimationDrawable을 얻어 온다.
2. AnimationDrawabled의 특정 프레임을 Drawable로 얻어온다.
3. Drawable을 Bitmap으로 변환 한다.

이것을 코드로 나타내면,

public static Bitmap getFrameToBitmap(Context ctx, int resId, int nFrame)
{
    Resources res = ctx.getResources();     
    Bitmap bmpOneFrame = BitmapFactory.decodeResource(res, resId);
     
    if(bmpOneFrame == null)
    {
        AnimationDrawable ani = (AnimationDrawable)res.getDrawable(resId);
        Drawable drawableFrame = ani.getFrame(nFrame);
   
        bmpOneFrame = Bitmap.createBitmap(drawableFrame.getIntrinsicWidth(), 
                                          drawableFrame.getIntrinsicHeight(), 
                                          Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bmpOneFrame);
        drawableFrame.setBounds(0, 0, drawableFrame.getIntrinsicWidth(), 
                                      drawableFrame.getIntrinsicHeight());
        drawableFrame.draw(canvas);
    }
  
    return bmpFirstFrame;
}
참고로 리소스가 그냥 Drawable인 경우는 바로 Bitmap이 리턴된다.
또한 프레임 번호에 관련한 에러 처리는 없다 ^^;;

댓글 없음:

댓글 쓰기