Android图片系列(1)-------调用系统相册与相机获取图片
Android开发过程中,我们经常需要获取图片,你可以通过获取手机相册的图片,也可以调用相机拍照获取图片。这里主要讲这两个获取图片的方式,并记录其中遇到的小问题。
调用相册获取图片
这个功能非常简单,这里不多说了,这里贴出关键代码
Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT); openAlbumIntent.setType("image/*"); startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);
其中CHOOSE_PICTURE是requestCode。执行上述代码,然后在onActivityResult方法中接收返回数据
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);
调用相机拍照有两点需要注意,
- 你可以指定拍照所得照片的保存路径,也可以不指定,直接获得照片。二者区别在于后者会使照片失真(照片文件小很多)
- 很多相机拍照之后,照片是旋转90度的,所以需要处理照片角度
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); }
然后再onActivityResult中接收数据
photo = data.getExtras().getParcelable("data"); image.setImageBitmap(photo);
以下提供一个完整的例子,源码地址 效果图如下:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。