2012-12-06 2 views
1

다음 코드를 사용하여 카메라에서 가져온 이미지의 비트 맵을 가져 오려고합니다. 나는 그림을 찍은 사진에 워터 마크로 이미지를 추가하기 때문에이 개념을 사용했습니다. 그래서 Activity를 비트 맵으로 그리기 만하면됩니다.java.lang.IllegalStateException : 재활용 비트 맵 오류를 발생시킬 수 없습니다.

나는 다음과 같은 오류가 발생하고이 일을하고있는 동안 나는 다른 활동에이 비트 맵을 보낼

(재활용 된 비트 맵 오류가 발생 소포 수 없습니다).

이미지를 가져오고 있는지 여부는 어떻게 확인할 수 있습니까?

else if(v.equals(findViewById(R.id.ok_button))){ 


       topbar.setVisibility(View.GONE); 
       menubar.setVisibility(View.GONE); 
       bottom.setVisibility(View.GONE); 

       View s = ml.getRootView(); 
       s.setDrawingCacheEnabled(true); 

       b = s.getDrawingCache(); 
       Log.e("ok","ok"); 
       Intent i=new Intent(CameraActivity.this,Update.class); 
       i.putExtra("data",b); 
       startActivity(i); 
     //   s.setDrawingCacheEnabled(false); 
     //   s.setVisibility(View.GONE); 
       finish(); 

감사

+0

비트 맵은 분할되기 전에 재활용됩니다. check bitmap.isRecycled() – Atrix1987

+0

이 문제를 해결하는 방법은 무엇입니까? – user1871951

+0

재활용되지는 않았지만 나를 다른 Activiy로 데려 가지 않고 검은 색 화면이 나타납니다. – user1871951

답변

3

은 A는 "작은"는 말,하지만 난 질문을 찾을 수있는이 최근 하나의 동일한 문제에 다른 사람과 비슷한 문제를 가로 질러 왔어요, 그래서 답이 있다는 것이 가장 좋습니다 그것에.

먼저 getDrawingCache 메서드를 호출 할 때 원하는 이미지를 얻었는지 확인하십시오. 이미지가 표시되지 않는 경우 가능한 원인을 확인하려면 this post을 확인하십시오.

둘째, 이미지가 재활용되지 않는지 확인하십시오. IllegalStateException 같이 재활용 된 비트 맵을 소포 할 수 없다는 메시지가 던져져 응용 프로그램이 중단 될 수 있습니다. 이미지가 재활용되면 그냥 복사하여 Bundle에 복사하십시오. 부가 메모로 setDrawingCacheEnabled(false)으로 전화하면 recycle()으로 전화 할 것입니다.

세 번째 (마지막) 이미지가 다른 활동으로 전달되는지 확인하십시오. 잘못된 필드를 비 직렬화 또는 잘못된 변수로 변환하는 등의 실수는 매우 일반적입니다.

위의 코드가 모두 위의 코드와 일치하는 경우 검은 색 화면 만 표시하면 안됩니다. 여전히 검은 색 화면이 나타나면 버그가 Update 활동에 있고 이미지를 보내는 활동이 아닌 것일 가능성이 큽니다.

편집 : 질문을 읽지 못했습니다.

의도가 발생한 후 이미지가 직렬화 될 수 있기 때문에 예외가 발생할 수 있습니다. 이 경우, 단지 대신이 같은 Bitmap 자체의 IntentBitmap의 사본을 넣어 :

i.putExtra("data",b.copy(b.getConfig(), b); 

This question

나 그 실현 도왔다.

관련 문제