調用系統拍照
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); 取消人臉識别功能。