问题描述
在不存储在设备上的情况下将位图发送到另一个活动的最佳方法是什么?
如果我放putExtra(Bitmap),我会遇到缓冲区问题,因为Bitmap太大。
现在我用这个,但是太慢了:
Intent intent = new Intent(context, ImageScreen.class);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bytes = stream.toByteArray();
intent.putExtra("image",bytes);
context.startActivity(intent);
1楼
您说位图太大,在这种情况下,最好的解决方案是将Bitmap
写入应用程序的私有存储中,然后将文件路径发送到下一个活动。
将位图写入文件并检索文件路径的代码如下
public String createBitmapFile(Bitmap bitmap) {
String fileName = "image";
try {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bytes);
FileOutputStream fo = openFileOutput(fileName, Context.MODE_PRIVATE);
fo.write(bytes.toByteArray());
fo.close();
} catch (Exception e) {
fileName = null;
}
return fileName;
}
然后在下一个活动中,您可以执行以下操作
Bitmap bitmap = BitmapFactory.decodeStream(context
.openFileInput(fileName));
要稍后删除文件,可以简单地使用。
if(activity.deleteFile(imageName))
Log.i(TAG, "Image deleted");