이미지 Drawable을 메모리 누수 없이 Bitmap으로 변환하는 방법
2011. 1. 30. 19:20ㆍ안드로이드 개발
다음 두가지 방법은 많이 사용할 경우 Heap 영역이 모자라서 Out of Memory가 발생할 수 있다.
1) bitmap = Bitmap.createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight, Bitmap.Config.ARGB_8888);
2) bitmap = bitmapdrawable.getBitmap().copy(Bitmap.Config.ARGB_8888, true);
대신, BitmapDrawable의 getBitmap 메소드를 사용하면 Out of memory는 발생하지 않는다.
하지만 이 경우에는 bitmap에다가 그리기를 하게 되면 해당 이미지에 계속 그려지게 되는 문제가 있다.
즉, 코드 상에서 비트맵 이미지의 수정이 없을 경우에만 사용될 수 있는 방법이다.
bitmap = bitmapdrawable.getBitmap();
코드 상에서 비트맵 이미지를 수정하려면 부득이하게 createBitmap 메소드를 사용해야 하는데, 그렇게 되면 비트맵 이미지의 개수에 제한이 생기는 문제가 있다.
코드 상에서 언제든지 메모리 반환을 마음대로 하지 못하는 것은 역시 java의 한계인듯.
참고 사이트 : http://blog.vizpei.kr/105116344
1) bitmap = Bitmap.createBitmap( drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight, Bitmap.Config.ARGB_8888);
2) bitmap = bitmapdrawable.getBitmap().copy(Bitmap.Config.ARGB_8888, true);
대신, BitmapDrawable의 getBitmap 메소드를 사용하면 Out of memory는 발생하지 않는다.
하지만 이 경우에는 bitmap에다가 그리기를 하게 되면 해당 이미지에 계속 그려지게 되는 문제가 있다.
즉, 코드 상에서 비트맵 이미지의 수정이 없을 경우에만 사용될 수 있는 방법이다.
bitmap = bitmapdrawable.getBitmap();
코드 상에서 비트맵 이미지를 수정하려면 부득이하게 createBitmap 메소드를 사용해야 하는데, 그렇게 되면 비트맵 이미지의 개수에 제한이 생기는 문제가 있다.
코드 상에서 언제든지 메모리 반환을 마음대로 하지 못하는 것은 역시 java의 한계인듯.
참고 사이트 : http://blog.vizpei.kr/105116344