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);
然而,我最终得到一张空白图片,任何想法为什么?
答案 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
中使用。