在传递给android中的另一个活动之前压缩图像

时间:2015-04-20 11:45:10

标签: android android-intent android-activity bitmap

我想要做的是用我的相机拍照,然后将该图像传递给另一个活动,在下一个活动中,我希望获得该图像并上传它。我尝试使用以下代码,它的工作原理但质量非常低。

private void putBitmapToIntentAndStartActivity(Bitmap bitmap)
{
    Intent i = new Intent(getActivity(), ImagePreviewActivity.class);
   // Bitmap b=scaleDown(bitmap,400,true); 
    ByteArrayOutputStream bs = new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, bs);

    i.putExtra("imageByteArray", bs.toByteArray());
    startActivity(i);


}

如果我用缩放方法删除标记的行,它将无法正常工作。如果我使用它它有效但​​质量很低。 是否有任何想法如何传递该图像并以完整的质量在下一个活动中获得它?

谢谢!我确定这是一个非常普遍的问题。

1 个答案:

答案 0 :(得分:0)

如果您想在活动/片段之间转移位图

<强>活动

在Activites

之间传递位图
Intent intent = new Intent(this, Activity.class);
intent.putExtra("bitmap", bitmap);

并在“活动课程”

Bitmap bitmap = getIntent().getParcelableExtra("bitmap");

<强>片段

在片段之间传递位图

SecondFragment fragment = new SecondFragment();
Bundle bundle = new Bundle();
bundle.putParcelable("bitmap", bitmap);
fragment.setArguments(bundle);

在SecondFragment内部接收

Bitmap bitmap = getArguments().getParcelable("bitmap");

转移大位图(压缩)

如果您的活页夹事务失败,这意味着您将大型元素从一个活动转移到另一个活动,从而超出活页夹事务缓冲区。

因此,在这种情况下,您必须将位图压缩为字节数组,然后在另一个活动中解压缩,就像这样

在FirstActivity中

Intent intent = new Intent(this, SecondActivity.class);

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPG, 100, stream);
byte[] bytes = stream.toByteArray(); 
intent.putExtra("bitmapbytes",bytes);

以及SecondActivity

byte[] bytes = getIntent().getByteArrayExtra("bitmapbytes");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);