有時候我們需要選擇一個圖片來做頭像或是上傳到相冊中,這時候我們可以選擇啟動相機拍照,或者從圖庫中選擇。
首先看看如何啟動相機拍照並取得所拍的照片。
下面是啟動相機拍照並返回所拍的照片的代碼:
1 public void capturePicture(){ 2 //啟動拍照,並保存到臨時文件 3 Intent intent = new Intent(); 4 intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); 5 intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 6 startActivityForResult(intent, REQUEST_CAPTURE_IMAGE); 7 }
下面是啟動相機攝像並返回所拍的錄像的代碼:
1 public void captureVideo(){ 2 Intent intent2 = new Intent(); 3 intent2.setAction(MediaStore.ACTION_VIDEO_CAPTURE); 4 intent2.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0); //設置為低質量 5 startActivityForResult(intent2, REQUEST_CAPTURE_VIDEO); 6 }
下面是打開圖庫(既系統默認的圖片選擇器),選擇一個圖片或視頻的代碼:
1 public void choosePicture(){ 2 Intent intent3 = new Intent(); 3 intent3.setType("image/*"); 4 intent3.setAction(Intent.ACTION_GET_CONTENT); 5 startActivityForResult(intent3, REQUEST_CHOOSE); 6 }
這樣子整個過程就完成了,拍完照后我們按“確定”健,或者點擊選擇了照片后,返回到了我們程序的界面,那如何取得剛才的照片呢?請注意上面的代碼中使用了startActivityForResult方法,所以很明顯我們需要重載onActivityResult方法來拿到返回的數據。代碼如下:
1 @Override 2 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 3 super.onActivityResult(requestCode, resultCode, data); 4 5 switch(resultCode){ 6 case RESULT_OK: 7 Uri uri = data.getData(); // 得到Uri 8 String fPath = uri2filePath(uri); // 轉化為路徑 9 /* 做你想做的處理 **/ 10 break; 11 } 12 }
整個過程到此完成。
下面附上制作縮略圖和把Uri轉化為文件路徑的方法!
制作圖片或視頻的縮略圖:
1 /** 創建縮略圖,返回縮略圖文件路徑 */ 2 public String createThumbnail(Bitmap source, String fileName){ 3 int oldW = source.getWidth(); 4 int oldH = source.getHeight(); 5 6 int w = Math.round((float)oldW/MAX_SIZES); //MAX_SIZE為縮略圖最大尺寸 7 int h = Math.round((float)oldH/MAX_SIZES); 8 9 int newW = 0; 10 int newH = 0; 11 12 if(w <= 1 && h <= 1){ 13 return saveBitmap(source, fileName); 14 } 15 16 int i = w > h ? w : h; //獲取縮放比例 17 18 newW = oldW/i; 19 newH = oldH/i; 20 21 Bitmap imgThumb = ThumbnailUtils.extractThumbnail(source, newW, newH); //關鍵代碼!! 22 23 return saveBitmap(imgThumb, fileName); //注:saveBitmap方法為保存圖片並返回路徑的private方法 24 } 25 26 /** 創建視頻縮略圖,返回縮略圖文件路徑 */ 27 public String createVideoThumbnail(String filePath, String fileName){ 28 Bitmap videoThumb = ThumbnailUtils.createVideoThumbnail(filePath, Thumbnails.MINI_KIND); //關鍵代碼!! 29 return saveBitmap(videoThumb, fileName); //注:saveBitmap方法為保存圖片並返回路徑的private方法 30 31 }
把Uri轉化為文件路徑:
1 /** 把Uri轉化成文件路徑 */ 2 private String uri2filePath(Uri uri){ 3 String[] proj = { MediaStore.Images.Media.DATA }; 4 Cursor cursor = managedQuery(uri,proj,null,null,null); 5 int index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 6 cursor.moveToFirst(); 7 String path = cursor.getString(index); 8 return path; 9 }
來源:http://blog.csdn.net/assassin4824/article/details/7767248
