【发布时间】: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