我获取相机帧,使用OpenCV进行一些处理,并生成几个位图图像。我想把它们传给另一个活动。现在,这些图像并不是很小。事实上,如果我试图使用intent.putExtra
作为parcelable
s通过所有这些,我就会得到
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_所提到的,捆绑包的内存大小非常有限,并且不是为传输大量数据而设计的。