【问题标题】:Android: Attempting to Pass Bitmap as a Byte Array from One Activity to AnotherAndroid:尝试将位图作为字节数组从一个活动传递到另一个活动
【发布时间】:2015-10-12 22:44:30
【问题描述】:

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

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

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,它工作正常。所以错误似乎在于字节数组从第一个活动传递到第二个活动,但我不知道为什么会这样。

【问题讨论】:

  • 您是否验证了相同的数据来自您输入的意图?如果是这样,那么问题一定是您如何在 ImageView 中加载它。视图是否有可能尚未完全膨胀? decodeByteArray() 方法是否有可能以某种方式更改数据,您需要提供更多/不同的选项?
  • @Hardy 我不确定我是否检查正确,但似乎从意图中出来的数据与进入的数据不同。我认为问题不在于 decodeByteArray () 或者我如何将它加载到 ImageView 中,考虑到当我在没有通过意图的情况下测试它们时,它工作正常。

标签: android arrays android-intent bitmap compression


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2021-03-15
    • 2013-07-17
    • 1970-01-01
    • 2012-01-19
    相关资源
    最近更新 更多