本文给大家分享了2个安卓实现实现 拍照 选择图片 剪裁等的代码,都是从正式项目中提取出来了,非常实用,有需要的小伙伴可以参考下。
前言,版本兼容问题主要是由于4.4以前和4.4以后的Uri的格式不同所造成的错误
1.拍照 和选择图片
①选择图片
intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, GALLERY_REQUEST_CODE);
②拍照
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, CAMERA_REQUEST_CODE);
2.获取系统传来的值
标记符
private static int CAMERA_REQUEST_CODE = 1;
private static int GALLERY_REQUEST_CODE = 2;
private static int CROP_REQUEST_CODE = 3;
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST_CODE) {
if (data == null) {
return;
} else { //拍照
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap bm = extras.getParcelable("data");
Uri uri = saveBitmap(bm);
startImageZoom(uri);
}
}
} else if (requestCode == GALLERY_REQUEST_CODE) {
if (data == null) {//相册
return;
}
Uri uri;
uri = data.getData();
Uri fileUri = convertUri(uri);
startImageZoom(fileUri);
} else if (requestCode == CROP_REQUEST_CODE) {
if (data == null) {
return;
}//剪裁后的图片
Bundle extras = data.getExtras();
if (extras == null) {
return;
}
Bitmap bm = extras.getParcelable("data");
ShowImageView(bm);
}
}
3.图片选取后 根据Url 转成流 并保存
private Uri convertUri(Uri uri) {
InputStream is = null;
try {
is = getContentResolver().openInputStream(uri);
Bitmap bitmap = BitmapFactory.decodeStream(is);
is.close();
return saveBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}










