2

我正在尝试使用以下代码来获取从相机拍摄的图像位图。我使用这个概念是因为我将图像作为水印添加到拍摄的照片中。所以我只是让 Activity 绘制为位图。

当我这样做时,我收到以下错误(无法包裹回收的位图错误)

我想将此位图发送到另一个活动。

如何检查我是否获得图像?

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();

谢谢

4

1 回答 1

5

晚了“一点”,但我最近遇到了一个与此类似的问题,遇到相同问题的其他人可能会找到您的问题,所以最好有一个答案。

首先,确保在调用该getDrawingCache方法时获得所需的图像。如果您没有获得图像,请查看此帖子以了解可能的原因。

其次,确保图像不会被回收。情况可能并非如此,因为IllegalStateException说您无法打包回收的位图,会被抛出并且您的应用程序会崩溃。如果您的图像确实被回收,只需复制它并将副本放入Bundle. 作为旁注,调用setDrawingCacheEnabled(false)将调用recycle().

第三(也是最后一个),确保图像通过其他活动。反序列化错误字段或错误变量等错误非常常见。

如果上述一切顺利并且您发生这种情况的原因在上面的代码中,那么您不应该只显示黑屏。如果您仍然出现黑屏,则错误很可能是在Update活动中,而不是在发送图像的活动中。

编辑:误读了这个问题。

您可能会遇到异常,因为在触发意图后图像可能(无法确认)被序列化。如果是这种情况,只需在 , 上放一个副本BitmapIntent而不是Bitmap像这样:

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

这个问题帮助我意识到了这一点。

于 2013-06-05T19:25:12.067 回答