欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android调用系统裁减图片,出现android.os.TransactionTooLargeException错误

程序员文章站 2022-04-09 08:05:36
...

在调用系统裁剪照片的时候,出现了android.os.TransactionTooLargeException: data parcel size 642356 bytes。

 Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(uri, "image/*");
        // crop为true是设置在开启的intent中设置显示的view可以剪裁
        intent.putExtra("crop", "true");
        intent.putExtra("aspectX", 24);
        intent.putExtra("aspectY", 29);
        intent.putExtra("outputX", 358);
        intent.putExtra("outputY", 441);
        intent.putExtra("outputFormat", "JPEG");
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file_reverse_camera));
        intent.putExtra("return-data", true);
        intent.putExtra("noFaceDetection", true);
        startActivityForResult(intent, REQUEST_IDENTITY_REVERSE_CROP);

当时在裁剪照片时return-data传递的true,这样的话就会在onActivityResult的Intent中data的值会传递一个Bitmap对象,如果照片太大的话,就会出现android.os.TransactionTooLargeException: data parcel size 642356 bytes错误。在intent传递之前parcel有大小限制。这时候我们只能传图片路径,不能传bitmap对象。我们需要将intent.putExtra("return-data", false);

读取图片路径的方式:

 Uri photoCroped = Uri.fromFile(file_reverse_camera);
                Bitmap bitmap = null;
                try {
                    bitmap = MediaStore.Images.Media.getBitmap(getmActivity().getContentResolver(), photoCroped);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                if (bitmap == null) {
                    return;
                }
                ivIdentityReversePhoto.setImageBitmap(bitmap);

 

相关标签: 图片裁剪