2012-12-06 28 views
1

我試圖使用以下代碼來獲取從相機拍攝的圖像位圖。 我使用了這個概念,因爲我將圖像作爲水印添加到拍攝的照片中。所以我只是將活動繪製爲位圖。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

您的位圖在被分割之前被回收。檢查bitmap.isRecycled() – Atrix1987

+0

如何解決這個問題? – user1871951

+0

它不會被回收,但它不會把我帶到另一個Activiy,只是黑色屏幕出現 – user1871951

回答

3

一個「小」晚了,但我已經遇到類似這樣的一個最近和別人有同樣的問題,一個問題可能會發現你的問題,所以最好是有一個答案到它。

首先,確保在調用getDrawingCache方法時獲得所需的圖像。如果您沒有收到圖像,請查看this post以瞭解可能的原因。

其次,確保圖像不被回收。這可能不是這種情況,作爲IllegalStateException,說你不能包裝一個回收的位圖,會被拋出,你的應用程序會崩潰。如果您的圖像被回收,請複製它並將其複製到Bundle。作爲一個側面說明,撥打setDrawingCacheEnabled(false)將撥打recycle()

第三個(也是最後一個),確保圖像通過其他活動。諸如反序列化錯誤字段或錯誤變量等錯誤是非常普遍的。

如果以上所有情況都很好,並且發生這種情況的原因是上述代碼,則不應只顯示黑屏。如果仍然出現黑屏,則很可能是該錯誤位於Update活動中,而不是發送該映像的錯誤。

編輯:誤讀了問題。

您可能會遇到異常,因爲圖像可能(無法證實這一點)在意圖被激發後序列化。如果是這樣的話,只是把Bitmap的副本上Intent,而不是Bitmap本身是這樣的:

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

This question讓我意識到這一點。

相關問題