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

 

 

 

 

 

posted @ 2012-11-23 10:11  mr.coke  阅读(6938)  评论(1编辑  收藏  举报