프로그래밍 메모장(안드로이드 프로그래밍) |
해당글은 본인이 추후에 잊어버려도 다시 기억할 수 있도록 쓰는 메모장같은 형식의 글입니다.
(강의 글이 아님)
불러온 비트맵을 수정하려 할 때 나는 예외 |
다음과 같은 상황에서 이러한 예외가 나온다.
public class PaintFunction extends View {
private Bitmap bitmap;
private Canvas canvas;
// ...
private void setBitmap(int type, String url, @Nullable String fileName) {
// ...
reset();
}
private void reset() {
if (fileopen) {
if (bitmap != null) {
bitmap.recycle();
bitmap = null;
}
bitmap = BitmapFactory.decodeFile(filename);
}
// ...
canvas = new Canvas(bitmap);
// 예외가 발생하는 구간↑
// ...
}
}
22번줄에서 bitmap을 BitmapFactory로 불러온 것을 바로 26번줄처럼 바로 캔버스에 연결하면
"java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor"가 Canvas에서 발생한다.
해결하는 방법은 아주 간단하다.
BitmapFactory로 불러온 비트맵을 복사해서 넣어주면 된다.
bitmap = BitmapFactory.decodeFile(filename);
↓↓↓
bitmap = BitmapFactory.decodeFile(filename).copy(Bitmap.Config.ARGB_8888, true);
'Study > Android' 카테고리의 다른 글
[안드로이드] FragmentTransaction에서 애니메이션을 줄때 주의점 (0) | 2017.02.21 |
---|---|
[안드로이드] 자바 IO를 이용하여 데이터를 입출력할 때 MIUI에서 주의점 (0) | 2017.02.21 |
[안드로이드] ADB를 무선으로 연결하기(하지만 완전한 무선은 아닌..) (0) | 2017.02.14 |
[안드로이드] 툴바(Toolbar)의 왼쪽에 버튼을 달기 (3) | 2017.02.03 |
[안드로이드] ListView 갱신하기 (0) | 2017.02.03 |