Android在程序中啟動拍照/攝像或選擇一張圖片/視頻,並制作縮略圖后保存


有時候我們需要選擇一個圖片來做頭像或是上傳到相冊中,這時候我們可以選擇啟動相機拍照,或者從圖庫中選擇。

首先看看如何啟動相機拍照並取得所拍的照片。

下面是啟動相機拍照並返回所拍的照片的代碼:

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

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM