2011-12-06 2 views
0

리소스에서 Drawable으로 표시되는 ImageView의 내용에 일부 추가하려고합니다. 모든 Drawable은 기본적으로 불변이지만, mutable() 메서드를 호출하고 에서 Bitmap을 얻은 후에도 Canvas 개체로 전달하면 java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor이됩니다.리소스에서 비트 맵 수정

Drawable homeImage = mHomeImage.getBackground(); // my ImageView 
homeImage.mutate(); 
Canvas c = new Canvas(((BitmapDrawable)homeImage).getBitmap()); 

이 사본의 작성하지 않고이 Bitmap을 수정할 수있는 방법이 있나요 : 다음 코드는?

답변

1

당신은 캔버스의 새 비트 맵을 만들어야합니다이

Bitmap bmp1 = (((BitmapDrawable)homeImage).getBitmap()) 
     .copy(Config.ARGB_8888, true); 
Canvas c = new Canvas(bmp1); 

을보십시오. 캔버스는 그려진 것을 저장하기 위해 전달하는 비트 맵을 사용하기 때문에 비트 맵은 변경 가능해야합니다.

+0

감사의 답변을 드리지만, 내가보기에 :이 복사본을 만들지 않고이 비트 맵을 수정할 수있는 방법이 있습니까 **? – teoREtik

+0

내가 일찍 UR 질문을 보았다. 난 그냥 질문에 코드가 작동하지 않습니다 위의 코드를 넣어. 그리고 난 당신이 그것의 복사본을 만들지 않고 비트 맵을 수정할 수 있다고 생각하지 않습니다. 이미지 뷰 위에 뭔가를 그리려는 경우. 새로운 비트 맵을 생성하고 새로운 것을 새로운 비트 맵에 그려 넣은 다음 framelayout을 사용하여 서로의 위에 뷰를 겹쳐 쌓으십시오. 단일보기로 나타납니다. – blessenm

+0

아니, 내 목표는 3 초마다 네트워크 속도를 듣고 이미지 상단에 와이파이 신호의 상태를 그리는 것입니다. 그리고 비트 맵을 복사하는 경우 메모리 소비가 두려워요.하지만 걱정하지 마세요. 응답 해 주셔서 감사합니다. – teoREtik

관련 문제