用到的变量:
private static final String IMAGE_NAME = "head.jpg";
private static final String IMAGE_FILE_LOCATION = "file:///sdcard/" + IMAGE_NAME;//temp file
Uri imageUri = Uri.parse(IMAGE_FILE_LOCATION);//The Uri to store the big bitmap
private Bitmap bitmap;
private File file;
private final int TAKE_BIG_PICTURE = 1;//从相册获取
private final int CROP_BIG_PICTURE = 2;//裁剪
private final int CHOOSE_PICTURE = 3;//拍照
1)拍照
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//action is capture
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, TAKE_BIG_PICTURE);
2)从相册选
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/*");
startActivityForResult(intent, CHOOSE_PICTURE);
3)裁剪
private void cropImageUri(Uri uri, int requestCode){
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 320);
intent.putExtra("outputY", 320);
intent.putExtra("scale", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.putExtra("return-data", false);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // no face detection
startActivityForResult(intent, requestCode);
}
4)onActivityResult()
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(resultCode!=RESULT_OK)
return;
switch(requestCode){
case TAKE_BIG_PICTURE:
cropImageUri(imageUri, CROP_BIG_PICTURE);
break;
case CROP_BIG_PICTURE:
if(imageUri != null){
bitmap = decodeUriAsBitmap(imageUri);
head.setBackground(new BitmapDrawable(ImageToCorner.toRoundCorner(bitmap, 800)));
try {
String path = "/mnt/sdcard/pic";
file=new File(path);//将要保存图片的路径
if(!file.exists()){
file.mkdir();
}
file = new File(path + IMAGE_NAME);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file));
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);
bos.flush();
bos.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
break;
case CHOOSE_PICTURE:
if(data != null){
imageUri = data.getData();
cropImageUri(imageUri, CROP_BIG_PICTURE);
}
break;
<span style="white-space:pre"> </span>}
}