为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着一只汪 2019-07-03 17:12:41
如何使用包在Android活动之间传递图像(位图)?假设我有一个活动从图片库中选择一个图像,并以位图的形式检索它,就像下面的例子:这里现在,我想传递这个位图,以便在另一个活动的ImageView中使用。我知道包可以在活动之间传递,但是如何将这个位图存储到包中呢?还是我应该采取另一种方法?
查看完整描述

3 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

我强烈建议采取不同的办法。

如果你真的想这么做的话,这是可能的,但是它花费了很多内存,而且速度也很慢。如果你有一部旧的手机和一张大的位图,它可能就行不通了。例如,你可以把它当作额外的传递。intent.putExtra("data", bitmap)..位图实现了Parcelable,所以您可以将其放入额外的部分。同样,一束putParcelable.

如果您想在活动之间传递它,我会将它存储在一个文件中。这是更有效率,更少的工作给你。您可以在数据文件夹中使用任何其他应用程序无法访问的mode_Private创建私有文件。


查看完整回答
反对 回复 2019-07-03
?
大话西游666

TA贡献1817条经验 获得超14个赞

如果将其作为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);}


查看完整回答
反对 回复 2019-07-03
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

按照@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

大量的零和缩放位图检查是完整的。


查看完整回答
反对 回复 2019-07-03
  • 3 回答
  • 0 关注
  • 580 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信