相機取圖

1 篇文章 / 0 new
author
相機取圖
► 呼叫外部相機的方式
若要將相機即時畫面在 app 內呈現, 則需實做 SurfaceHolder
private static final int TAKE_PHOTO = 1;
//儲存至DCIM目錄  
//File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
File outputImage = new File(CL.photoPath, "cl-temp.jpg");  
try {  
    if(outputImage.exists()) {  
        outputImage.delete();  
    }  
    outputImage.createNewFile();  
} catch(IOException e) {  
    e.printStackTrace();  
}  
//將File物件轉換為Uri並啟動照相程式  
imageUri = Uri.fromFile(outputImage);  
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); //照相  
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //指定圖片輸出位置, 若指定則 onActivityResult intent不會有圖像輸出  
startActivityForResult(intent, TAKE_PHOTO); //啟動照相, 拍完照結果返回onActivityResult()函數
► 取得照相的圖片
照相完成後透過 onActivityResult 傳回訊息
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    super.onActivityResult(requestCode, resultCode, data);  
    if (resultCode != RESULT_OK) return;   
    //
    switch(requestCode) {  
    case TAKE_PHOTO:
      if(data != null)
        Bitmap bitmap = (Bitmap) data.getExtras().getParcelable("data");//這圖片為縮圖約 100x200
      //若一開始指定圖片儲存路徑(原圖), 則data將為null, 可自行載入原圖做處理, 如縮圖, 呼叫裁圖等等
   break;
    }
}

►使用外部裁圖 app
imageUri = Uri.fromFile(outputImage);
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");  
intent.putExtra("scale", true);  
//設置寬高比例 
intent.putExtra("aspectX", 1);  
intent.putExtra("aspectY", 1);  
//設置預設裁圖寬高 
intent.putExtra("outputX", 600);  
intent.putExtra("outputY", 600);  
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);  
Toast.makeText(ct, "剪裁图片", Toast.LENGTH_SHORT).show();  
//廣播更新相簿  
Intent intentBc = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);  
intentBc.setData(imageUri);       
this.sendBroadcast(intentBc);      
//呼叫外部app
startActivityForResult(intent, CROP_PHOTO); //完成後一樣透過onActivityResult()返回結果
Free Web Hosting