如何在活动之间传递生成的大型位图图像



我获取相机帧,使用OpenCV进行一些处理,并生成几个位图图像。我想把它们传给另一个活动。现在,这些图像并不是很小。事实上,如果我试图使用intent.putExtra作为parcelables通过所有这些,我就会得到

TransactionTooLargeException

如果你问,这些图片不是资源。它们纯粹是生成的图像,并且在记忆中。所以没有URI可以找到它们。

解决这个问题的最佳方法是什么?

您需要首先将其转换为byteArray

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
Intent i = new Intent(this, Activity.class);
i.putExtra("bitmap", byteArray);
startActivity(i);

并像这样检索:

Bitmap bitmap;
//...
byte[] byteArray = getIntent().getByteArrayExtra("bitmap");
bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

你也可以阅读这里的文档

我建议您使用openFileOutput将这些图像保存到内部内存中,并将保存的文件名传递到下一个活动,在那里它们将通过openFileInput检索。

因为正如@esQmo_所提到的,捆绑包的内存大小非常有限,并且不是为传输大量数据而设计的。