调用系统拍照
intent i = new intent(mediastore.action_image_capture);
file myimagedir = new file(temp_take_photo_file_path);
//创建图片保存目录
if (!myimagedir.exists())
{
mylog.d(this, "create the path:" + temp_take_photo_file_path);
myimagedir.mkdirs();
}
//根据时间来命名
imagfile = file.createtempfile(""+system.currenttimemillis(), ".jpg",myimagedir);
tmpuri = uri.fromfile(imagfile);
i.putextra(mediastore.extra_output, tmpuri);
startactivityforresult(i, take_photo_request_code);
从图库选择图片
intent innerintent = new intent(intent.action_get_content); // "android.intent.action.get_content"
innerintent.settype("image/*"); // 查看类型
// stringimage_unspecified="image/*";详细的类型在com.google.android.mms.contenttype中
intent wrapperintent = intent.createchooser(innerintent, null);
act.startactivityforresult(wrapperintent, select_photo_request_code);
返回后接收并调用系统裁剪工具
@override
protected void onactivityresult(int requestcode, int resultcode,
intent intent) {
if (requestcode == mediahelper.take_photo_request_code || requestcode == mediahelper.select_photo_request_code) {
if (resultcode == result_ok ) {
uri uri = null;
if(requestcode == mediahelper.select_photo_request_code) {
uri = intent.getdata();
}else if(requestcode == mediahelper.take_photo_request_code) {
uri = mediahelper.tmpuri;
if (uri != null) {
final intent intent1 = new intent("com.android.camera.action.crop");
intent1.setdataandtype(uri, "image/*");
intent1.putextra("crop", "true");
intent1.putextra("aspectx", 1);
intent1.putextra("aspecty", 1);
intent1.putextra("outputx", 132);
intent1.putextra("outputy", 132);
intent1.putextra("return-data", true);
startactivityforresult(intent1, mediahelper.cut_photo_request_code);
else if(requestcode == mediahelper.cut_photo_request_code) {
if (resultcode == result_ok && intent != null) {
bm= intent.getparcelableextra("data");
在裁剪图片时,遇到有些图片不能按照某一指定的比例进行裁剪,查看了源码后才知道:系统的裁剪图片默认对图片进行人脸识别,当识别到有人脸时,会按aspectx和aspecty为1来处理,如果想设置成自定义的裁剪比例,需要设置nofacedetection为true。
即iintent.putextra("nofacedetection", true); 取消人脸识别功能。