在写Android应用的时候,很多时候需要调用自带的相机拍照或者直接从图库中选取图片并且对图片进行裁剪。
下面就讲述如何实现。
1. 调用相机
(1) 使用Intent调用相机,但是在启动Intent之前要设置一个文件路径,用来存储相机照下来的照片。
(2)然后使用startActivityForResult启动Intent。
(3)然后在protected void onActivityResult(int requestCode, int resultCode, Intent data)函数中获得拍照得到的照片
2. 调用图库中的图片和裁剪照片
步骤和调用相机类似,只是Intent的参数和获得照片时候的处理不一样,具体看下面的代码。
代码如下:
private static final int NONE = 0;
private static final int PHOTO_GRAPH = 1;// 拍照
private static final int PHOTO_ZOOM = 2; // 缩放
private static final int PHOTO_RESOULT = 3;// 结果
private static final String IMAGE_UNSPECIFIED = "image/*";
/*拍照获得图片*/
public void onCameraGetPictureClick(View v){
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(Environment
.getExternalStorageDirectory(),"temp.jpg")));
startActivityForResult(intent, PHOTO_GRAPH);
}
/*从相册获得图片*/
public void onBrowsePictureClick(View v){
Intent intent = new Intent();
intent.setType(IMAGE_UNSPECIFIED);
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent,PHOTO_ZOOM);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == NONE)
return;
// 拍照
if (requestCode == PHOTO_GRAPH) {
// 设置文件保存路径
File picture = new File(Environment.getExternalStorageDirectory()
+ "/temp.jpg");
startPhotoZoom(Uri.fromFile(picture));
}
if (data == null)
return;
// 读取相册缩放图片
if (requestCode == PHOTO_ZOOM) {
startPhotoZoom(data.getData());
}
// 处理结果
if (requestCode == PHOTO_RESOULT) {
Bundle extras = data.getExtras();
if (extras != null) {
Bitmap photo = extras.getParcelable("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0-100)压缩文件
//此处可以把Bitmap保存到sd卡中,具体请看:http://www.cnblogs.com/linjiqin/archive/2011/12/28/2304940.html
//companyLicenseData.setImageBitmap(photo); //把图片显示在ImageView控件上
}
}
super.onActivityResult(requestCode, resultCode, data);
}
/**
* 收缩图片
*
* @param uri
*/
public void startPhotoZoom(Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");//调用Android系统自带的一个图片剪裁页面,
intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
intent.putExtra("crop", "true");//进行修剪
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 300);
intent.putExtra("outputY", 300);
intent.putExtra("return-data", true);
startActivityForResult(intent, PHOTO_RESOULT);
}