Android开发过程中,我们经常需要获取图片,你可以通过获取手机相册的图片,也可以调用相机拍照获取图片。这里主要讲这两个获取图片的方式,并记录其中遇到的小问题。
调用相册获取图片
这个功能非常简单,这里不多说了,这里贴出关键代码
Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT);
openAlbumIntent.setType("image/*");
startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if (resultCode != RESULT_OK)
return;
switch (requestCode) {
case CHOOSE_PICTURE:
Uri uri = data.getData();
try {
if (photo != null)
photo.recycle();
photo = MediaStore.Images.Media.getBitmap(getContentResolver(),
uri);
System.out.println("bitmap size frome gallery = "
+ Utils.getBitmapSize(photo));
image.setImageBitmap(photo);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
break;
default:
break;
}
}
调用相机拍照获取图片
调用系统相机可以用以下两种方式:
//指定拍照照片保存路径 Intent cameraintent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraFile = DiskUtils.generatePhotoFile(this); cameraintent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraFile)); this.startActivityForResult(cameraintent, CAMERA_REQUEST); ////,,,,, //不指定图片保存路径 Intent cameraIntent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERANF_REQUEST);
调用相机拍照有两点需要注意,
public static int readPictureDegree(String path) {
int degree = 0;
try {
ExifInterface exifInterface = new ExifInterface(path);
int orientation = exifInterface.getAttributeInt(
ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
degree = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
degree = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
degree = 270;
break;
}
} catch (IOException e) {
e.printStackTrace();
}
return degree;
}
public static Bitmap rotateBitmap(Bitmap bitmap, float rotateDegree){
Matrix matrix = new Matrix();
matrix.postRotate((float)rotateDegree);
bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
return bitmap;
}
调用系统剪切图片功能
有时你想要对图片进行剪切,实现也很简单,如下
首先执行以下代码
// 图片剪切
private void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// crop为true是设置在开启的intent中设置显示的view可以剪裁
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 0);
intent.putExtra("aspectY", 0);
// outputX,outputY 是剪裁图片的宽高
// intent.putExtra("outputX", 2000);
// intent.putExtra("outputY", 2000);
intent.putExtra("return-data", true);
intent.putExtra("noFaceDetection", true);
this.startActivityForResult(intent, CROP_2_REQUEST);
}photo = data.getExtras().getParcelable("data");
image.setImageBitmap(photo);
以下提供一个完整的例子,源码地址 效果图如下:
Android图片系列(1)-------调用系统相册与相机获取图片
原文地址:http://blog.csdn.net/chziroy/article/details/43958039