在传送到android中的其他活动之前压缩图像

在传送到android中的其他活动之前压缩图像,android,android-intent,android-activity,bitmap,Android,Android Intent,Android Activity,Bitmap,我想做的是用我的相机拍一张照片,然后将该图像传递给另一个活动,在下一个活动中,我想获得该图像并上传它。我尝试使用下面的代码,它的工作,但质量非常低 private void putBitmapToIntentAndStartActivity(Bitmap bitmap) { Intent i = new Intent(getActivity(), ImagePreviewActivity.class); // Bitmap b=scaleDown(bitmap,400,true);

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

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


}
如果我用缩放方法删除标记行,它将不起作用。如果我用它的工作,但质量非常低。 有没有什么办法可以让你在下一次的活动中传递这张图片,并让它达到最好的质量

谢谢!我确信这是一个非常常见的问题。

如果您想在活动/片段之间传输位图

活动

在活动之间传递位图的步骤

在活动课上

碎片

在片段之间传递位图

在第二个片段中接收

传输大型位图压缩

如果您得到的是失败的活页夹事务,这意味着您通过将大型元素从一个活动传输到另一个活动而超出了活页夹事务缓冲区

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

在第一次活动中

在第二项活动中


如果您的图像来自一个文件,并且如果您这样指示相机,那么您可以更好地将该文件的路径传递给下一个活动。可能的副本
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);
Bitmap bitmap = getArguments().getParcelable("bitmap");
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);
byte[] bytes = getIntent().getByteArrayExtra("bitmapbytes");
Bitmap bmp = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);