Android相机、相册获取图片

来源:互联网 发布:mac表情 编辑:程序博客网 时间:2024/04/29 22:56

不多说直接上代码

1.拍照后获取图片(系统为了防止应用内存占用过大,对于在应用内通过相机拍摄的图片最终返回来的结果进行了压缩,压缩后的图片变得很小,通过getData的方式只能满足比如显示个头像这样的需求,如果要显示大图,就会出现模糊的情况,所以可以在拍照时,将拍得的照片先保存在本地

Uri imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"image.jpg"));  //指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换  openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);  
在onActivityResult方法中再将图片取出,并经过缩小处理再显示在界面上或上传给服务器

@Override      protected void onActivityResult(int requestCode, int resultCode, Intent data) {          super.onActivityResult(requestCode, resultCode, data);          if (resultCode == RESULT_OK) {              switch (requestCode) {              case TAKE_PICTURE:                  //将保存在本地的图片取出并缩小后显示在界面上                  Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory()+"/image.jpg");                  Bitmap newBitmap = ImageTools.zoomBitmap(bitmap, bitmap.getWidth() / SCALE, bitmap.getHeight() / SCALE);                  //由于Bitmap内存占用较大,这里需要回收内存,否则会报out of memory异常                  bitmap.recycle();                                    //将处理过的图片显示在界面上,并保存到本地                  iv_image.setImageBitmap(newBitmap);                  ImageTools.savePhotoToSDCard(newBitmap, Environment.getExternalStorageDirectory().getAbsolutePath(), String.valueOf(System.currentTimeMillis()));                  break;              default:                  break;              }          }      }  

2.打开相册选取图片

Intent openAlbumIntent = new Intent(Intent.ACTION_GET_CONTENT);                      openAlbumIntent.setType("image/*");                      startActivityForResult(openAlbumIntent, CHOOSE_PICTURE);  
在onActivity方法中处理获取到的图片

@Override      protected void onActivityResult(int requestCode, int resultCode, Intent data) {          super.onActivityResult(requestCode, resultCode, data);          if (resultCode == RESULT_OK) {              switch (requestCode) {              case CHOOSE_PICTURE:                  ContentResolver resolver = getContentResolver();                  //照片的原始资源地址                  Uri originalUri = data.getData();                   try {                      //使用ContentProvider通过URI获取原始图片                      Bitmap photo = MediaStore.Images.Media.getBitmap(resolver, originalUri);                      if (photo != null) {                          //为防止原始图片过大导致内存溢出,这里先缩小原图显示,然后释放原始Bitmap占用的内存                          Bitmap smallBitmap = ImageTools.zoomBitmap(photo, photo.getWidth() / SCALE, photo.getHeight() / SCALE);                          //释放原始图片占用的内存,防止out of memory异常发生                          photo.recycle();                                                    iv_image.setImageBitmap(smallBitmap);                      }                  } catch (FileNotFoundException e) {                      e.printStackTrace();                  } catch (IOException e) {                      e.printStackTrace();                  }                    break;                            default:                  break;              }          }      }  




0 0
原创粉丝点击