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