最近项目在选取图片是出现了裁剪后模糊的问题
xta Options Table for image/* crop:
附加选项
数据类型
描述
crop
String
发送裁剪信号
aspectX
int
X方向上的比例
aspectY
int
Y方向上的比例
outputX
int
裁剪区的宽
outputY
int
裁剪区的高
scale
boolean
是否保留比例
return-data
boolean
是否将数据保留在Bitmap中返回
data
Parcelable
相应的Bitmap数据
circleCrop
String
圆形裁剪区域?
MediaStore.EXTRA_OUTPUT ("output")
URI
将URI指向相应的file:///...,详见代码示例
//开始return-data设置了true的话直接返回bitmap,可能会很占内存
intent.putExtra("return-data", true);
这样返回的bitmap是还存在内存中的缩略图,所以很模糊,后来改为把剪切的图片保存起来不直接返回bitmap一切就OK了
private Uri imageUri;
private static final String IMAGE_FILE_LOCATION = Constants.ALBUM_PATH+"/temp.jpg";
imageUri = Uri.fromFile(new File(IMAGE_FILE_LOCATION));
/*
* 剪切图片
*/
private void crop(Uri uri) {
// 裁剪图片意图
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
// 裁剪框的比例,1.5:1
intent.putExtra("aspectX", 16);
intent.putExtra("aspectY", 9);
// 裁剪后输出图片的尺寸大小
intent.putExtra("outputX", 800);
intent.putExtra("outputY", 450);
// intent.putExtra("outputFormat", "JPEG");// 图片格式
//intent.putExtra("noFaceDetection", true);// 取消人脸识别
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
startActivityForResult(intent, SELECT_PIC_BY_CUT_PHOTO);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case SELECT_PIC_BY_CUT_PHOTO:
// 从剪切图片返回的数据
if (resultCode == Activity.RESULT_OK) {
if (data != null) {
if (imageUri != null) {
Bitmap bitmap = ImageUtils.decodeUriAsBitmap(getActivity(), imageUri);
// 把解析到的位图显示出来
advanceDialog.setPic(bitmap);
advanceDialog.dismissPicDialog();
String imageurl = Constants.ALBUM_PATH;
saveMyBitmap(imageurl, bitmap);
}
}
}
break;
}
super.onActivityResult(requestCode, resultCode, data);
}
private Bitmap decodeUriAsBitmap(Uri uri) {
Bitmap bitmap = null;
try {
// 先通过getContentResolver方法获得一个ContentResolver实例,
// 调用openInputStream(Uri)方法获得uri关联的数据流stream
// 把上一步获得的数据流解析成为bitmap
bitmap = BitmapFactory.decodeStream(getActivity().getContentResolver().openInputStream(uri));
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
return bitmap;
}