在活动之间传输位图

时间:2018-03-31 12:11:21

标签: android bitmap

bmp1是位图图像

活动1中的

我有以下代码

ByteArrayOutputStream stream = new ByteArrayOutputStream();
                bmp1.compress(Bitmap.CompressFormat.PNG, 100, stream);
                byte[] byteArray = stream.toByteArray();
regIntent.putExtra("chosenImage",byteArray);

然后在activity2中我这样做。

Intent regIntent = getIntent();
 byte[] byteArray = regIntent.getByteArrayExtra("chosenImage");
        bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
        bmp = Bitmap.createScaledBitmap(bmp, 150, 200, true);
然后我使用以下代码显示图像:

 ImageView mainBookImage = findViewById(R.id.mainBookImage); //uncoment to load image
        mainBookImage.setImageBitmap(bmp);

然而,我最终得到一张空白图片,任何想法为什么?

2 个答案:

答案 0 :(得分:1)

在你的第一个活动中。

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp1.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

Intent intent = new Intent();
intent.setClass(getApplicationContext(), MainActivity.class);
intent.putExtra("chosenImage", byteArray);
startActivity(n);

在你的第二个活动oncreate()

Bundle extras = getIntent().getExtras();
byte[] byteArray = extras.getByteArray("chosenImage");
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

//  And Set Image in Imageview like this

ImageView mainBookImage = findViewById(R.id.mainBookImage);
if (bmp != null) {
        mainBookImage.setImageBitmap(bmp);
    }

答案 1 :(得分:0)

我建议你实施不同的方法。

如果您必须自己传递位图,那么您可以按原样传递Bitmap对象,因为它实现了Parcelable。它就像regIntent.putExtra("chosenImage",bmp1);和活动2中一样简单:

final Bitmap bmp1= regIntent.getParcelableExtra("chosenImage");

但是,这种方法非常不鼓励,因为它会耗费大量内存并影响应用程序的响应能力。此外,在低端设备上,这可能会因内存不足而导致崩溃,并且还会限制可通过Intents传输的数据大小。

一种方法可能是将其存储在文件中,然后通过Intent extra传递文件路径。在Activity2中,您可以检索路径 - >在Bitmap - >中加载图片在ImageView中使用。