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

时间:2015-07-22 20:42:39

标签: android arrays android-intent bitmap compression

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

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

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);

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

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);

我将代码复制到第一个活动,压缩位图并立即解压缩。我使用解压缩的位图并将其设置为该活动中的ImageView,并且工作正常。所以错误似乎是从第一个活动到第二个活动的字节数组的传递,但我无法弄清楚为什么会这样。

1 个答案:

答案 0 :(得分:0)

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

无论如何,我在这里找到了答案: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);