我一直在尝试将单个字节数组(压缩位图)从一个活动传递到另一个活动。当我尝试将字节数组解码回位图并显示位图时,它似乎是一个完全透明的位图。
我在第一个活动上使用此代码来压缩位图并发送字节数组:
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,并且工作正常。所以错误似乎是从第一个活动到第二个活动的字节数组的传递,但我无法弄清楚为什么会这样。
答案 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);