2012-12-05 35 views
3

我想將圖像添加到相機surfaceview,並試圖通過使用下面的代碼獲取該圖像。不能包含回收的位圖錯誤

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

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

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

       Bitmap b = s.getDrawingCache(); 


       Bitmap watermarkimage=b; 
       s.setVisibility(View.GONE); 
       Log.e("ok","ok"); 
       Intent i=new Intent(CameraActivity.this,Update.class); 
       i.putExtra("data",watermarkimage); 
       startActivity(i); 
       finish(); 
       } 

我救了整個活動通過使用下面的代碼,我得到了位圖

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

       Bitmap b = s.getDrawingCache(); 

得到image.And當我試圖此位圖發送到另一個活動,我得到這個錯誤

12-05 17:58:38.700: E/AndroidRuntime(10590): FATAL EXCEPTION: main 
12-05 17:58:38.700: E/AndroidRuntime(10590): java.lang.IllegalStateException: Can't parcel a recycled bitmap 
12-05 17:58:38.700: E/AndroidRuntime(10590): at android.graphics.Bitmap.checkRecycled(Bitmap.java:210) 
12-05 17:58:38.700: E/AndroidRuntime(10590): at android.graphics.Bitmap.writeToParcel(Bitmap.java:960) 
12-05 17:58:38.700: E/AndroidRuntime(10590): at android.os.Parcel.writeParcelable(Parcel.java:1151) 
12-05 17:58:38.700: E/AndroidRuntime(10590): at android.os.Parcel.writeValue(Parcel.java:1070) 
12-05 17:58:38.700: E/AndroidRuntime(10590): at android.os.Parcel.writeMapInternal(Parcel.java:488) 
12-05 17:58:38.700: E/AndroidRuntime(10590): at android.os.Bundle.writeToParcel(Bundle.java:1552) 
12-05 17:58:38.700: E/AndroidRuntime(10590): at android.os.Parcel.writeBundle(Parcel.java:502) 
12-05 17:58:38.700: E/AndroidRuntime(10590): at android.content.Intent.writeToParcel(Intent.java:5492) 
12-05 17:58:38.700: E/AndroidRuntime(10590): at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1341) 
12-05 17:58:38.700: E/AndroidRuntime(10590): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1374) 
12-05 17:58:38.700: E/AndroidRuntime(10590): at android.app.Activity.startActivityForResult(Activity.java:2873) 
+0

你不能在onCreate()中做到這一點,因爲直到在onCreate() – Simon

回答

3

請嘗試製作此位圖的副本或複製副本並將其複製。

Bitmap watermarkimage = b.copy(b.getConfig(), true); 

我會冒險猜測getDrawingCache返回的數據是與b和watermarkimage共享的。所以也許setVisible Gone會導致它回收。

+0

之後才繪製UI,它不工作,如果我沒有做s.setVisibility(View.GONE);這個視圖仍然是我稱爲intent – user1871951

+0

你可以確認你不在onCreate()按simons評論做這個嗎? – Emile

+0

是的,我不這樣做oncreate(),我在onClickListener,這是onCreate()之外, – user1871951

相關問題