Android:尝试将位图作为字节数组从一个 Activity 传递到另一个

Android: Attempting to Pass Bitmap as a Byte Array from One Activity to Another

我一直在尝试将单个字节数组(压缩位图)从一个 activity 传递到另一个。当我尝试将字节数组解码回位图并显示位图时,它似乎是一个完全透明的位图。

我在第一个 activity 上使用此代码来压缩位图并发送字节数组:

try {
    InputStream selectedImage = getContentResolver().openInputStream(Uri.parse(photoPath));
    bitmap = BitmapFactory.decodeStream(selectedImage);
} catch (FileNotFoundException exception) {
    Log.e(this.toString(), exception.toString());
}

ByteArrayOutputStream stream = new ByteArrayOutputStream();

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte [] byteArray = stream.toByteArray();

Log.e("PANTHERIT_BYTEARRAY", byteArray.toString());

Intent stickerActivity = new Intent (this, StickerActivity.class);
stickerActivity.putExtra("byteArray", byteArray);
startActivity(stickerActivity);

并且我在接受 activity 中使用此代码来解压缩和存储位图:

byte [] byteArray = getIntent().getByteArrayExtra("byteArray");

Log.e("STICKER_BYTEARRAY", byteArray.toString());

BitmapFactory.Options options = new BitmapFactory.Options();
options.inMutable = true;
bitmap = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length, options);

ImageView bitmapview = (ImageView) findViewById(R.id.bitmap_view);
bitmapview.setImageBitmap(bitmap);

我把代码复制到第一个activity,压缩位图,马上解压。我将解压缩的位图设置为 activity 中的 ImageView,它工作正常。所以错误似乎是将字节数组从第一个 activity 传递到第二个,但我不知道为什么会这样。

我找到了答案。我真的不知道为什么字节数组变得混乱,也许它太大了?即便如此,输入和输出字节数组的长度相同,所以不是很好的解释。

无论如何,我在这里找到了我的答案:Send Bitmap Using Intent Android。 Zaid Daghestani 的第一个答案与我最初尝试的相同,但他的编辑是有效的。不是传递字节数组,而是将压缩位图保存到临时文件,并通过 intent 传递文件名。绝对适用于传递位图,现在我只需要弄清楚如何在 SurfaceView 而不是 ImageView 上显示位图...

此外,如果您需要可变位图(以便将其传递给 ImageView),您可以使用:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inMutable = true;
bitmap = BitmapFactory.decodeStream(input, null, options);