无法对已回收的位图进行分割错误。

6
我正在尝试将图像添加到相机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();

当我尝试将此位图发送到另一个活动时,出现了以下错误。
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)

如果你正在onCreate()中这样做,那么是做不到的,因为UI直到onCreate()之后才会被绘制。 - Simon
1个回答

6
尝试制作此位图的副本或克隆,并打包副本。
Bitmap watermarkimage = b.copy(b.getConfig(), true);

我猜测getDrawingCache返回的数据是与b和watermarkimage共享的。因此,将setVisible设置为Gone可能会导致它被回收。

如果我没有调用s.setVisibility(View.GONE);,这个视图即使我调用了意图也会保留,它不起作用。 - user1871951
你能确认一下,你没有像Simon的评论所说那样在onCreate()中执行这个操作吗? - Emile
是的,我不是在onCreate()中做这个,我是在onClickListner中做的,而且它是在onCreate()之外的。 - user1871951

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接