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);
上一篇: IO流之copy PDF文件