【问题标题】:Cant parcel a recycled bitmap error无法打包回收的位图错误
【发布时间】:2012-12-05 13:12:47
【问题描述】:

我正在尝试将图像添加到相机表面视图并尝试使用以下代码获取该图像。

       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() 中执行此操作,如果您正在这样做,因为直到 onCreate() 之后才绘制 UI

标签: android


【解决方案1】:

尝试制作此位图的副本或克隆并打包副本。

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

我会冒险猜测 getDrawingCache 返回的数据与 b 和 watermarkimage 共享。所以也许 setVisible to Gone 会导致它被回收。

【讨论】:

  • 它不起作用,如果我没有制作 s.setVisibility(View.GONE);即使我称之为意图,这种观点仍然存在
  • 你能根据西蒙斯的评论确认你没有在 onCreate() 中这样做吗?
  • 是的,我不是在 oncreate() 中执行此操作,而是在 onClickListener 中执行此操作,它位于 onCreate() 之外
猜你喜欢
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 1970-01-01
  • 2015-02-09
  • 2019-08-03
相关资源
最近更新 更多