猿问

如何使用包在Android活动之间传递图像(位图)?

如何使用包在Android活动之间传递图像(位图)?

假设我有一个活动从图片库中选择一个图像,并以位图的形式检索它,就像下面的例子:这里

现在,我想传递这个位图,以便在另一个活动的ImageView中使用。我知道包可以在活动之间传递,但是如何将这个位图存储到包中呢?

还是我应该采取另一种方法?


守着一只汪
浏览 581回答 3
3回答

慕斯王

我强烈建议采取不同的办法。如果你真的想这么做的话,这是可能的,但是它花费了很多内存,而且速度也很慢。如果你有一部旧的手机和一张大的位图,它可能就行不通了。例如,你可以把它当作额外的传递。intent.putExtra("data", bitmap)..位图实现了Parcelable,所以您可以将其放入额外的部分。同样,一束putParcelable.如果您想在活动之间传递它,我会将它存储在一个文件中。这是更有效率,更少的工作给你。您可以在数据文件夹中使用任何其他应用程序无法访问的mode_Private创建私有文件。

大话西游666

如果将其作为Parcelable传递,则必然会得到Java绑定程序失败错误。因此,解决方案是:如果位图很小,比如缩略图,将其作为字节数组传递并构建位图,以便在下一个活动中显示。例如:在你的召唤活动中.。Intent i = new Intent(this, NextActivity.class);Bitmap b;  // your bitmapByteArrayOutputStream bs = new ByteArrayOutputStream();b.compress(Bitmap.CompressFormat.PNG, 50, bs); i.putExtra("byteArray", bs.toByteArray());startActivity(i);.在你的接收活动中if(getIntent().hasExtra("byteArray")) {     ImageView previewThumbnail = new ImageView(this);     Bitmap b = BitmapFactory.decodeByteArray(         getIntent().getByteArrayExtra("byteArray"),0,getIntent().getByteArrayExtra("byteArray").length);             previewThumbnail.setImageBitmap(b);}

qq_花开花谢_0

按照@EboMike的建议,我将位图保存在一个名为MyImage在我的应用程序的内部存储中,无法访问我的其他应用程序。这部分的代码如下:public String createImageFromBitmap(Bitmap bitmap) {     String fileName = "myImage";//no .png or .jpg needed     try {         ByteArrayOutputStream bytes = new ByteArrayOutputStream();         bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bytes);         FileOutputStream fo = openFileOutput(fileName, Context.MODE_PRIVATE);         fo.write(bytes.toByteArray());         // remember close file output         fo.close();     } catch (Exception e) {         e.printStackTrace();         fileName = null;     }     return fileName;}然后,在下一个活动中,您可以解码这个文件。MyImage使用以下代码转到位图:Bitmap bitmap = BitmapFactory.decodeStream(context                     .openFileInput("myImage"));//here context can be anything like getActivity() for fragment, this or MainActivity.this注大量的零和缩放位图检查是完整的。
随时随地看视频慕课网APP

相关分类

Android
我要回答