天天看點

android調用系統拍照程式和從圖庫選取圖檔,傳回後調用系統裁剪工具

調用系統拍照

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);  取消人臉識别功能。

繼續閱讀