安卓调用系统拍照功能:1、启动拍照返回图片,2、启动拍照,图片存储在指定路径下

全栈工程师开发手册 (作者:栾鹏)
安卓教程全解

安卓调用系统拍照功能,两种方式获取拍摄的照片。

1、启动系统拍照intent,并直接返回图片数据

2、启动系统拍照intent,拍照后存储在指定的路径下,返回后app主动读取路径下的图片文件。

第一种方式:启动拍照,返回图片数据

获取拍摄的照片,照片数据存放在内存中

  public void takephone() {
	  startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), 0);
  }

第二种方式:启动拍照,图片存储到指定路径下

使用一个intent请求拍照,照片存储在指定位置

//函数外要先定义一个Uri对象,存储图片路径。
  private Uri outputFileUri;  


//启动拍照的函数
  public void takephone_save() {
	//创建输出文件
      File file = new File(Environment.getExternalStorageDirectory(),"test.jpg");  //存放在sd卡的根目录下
      outputFileUri = Uri.fromFile(file);
 
      //生成Intent.
      Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
      intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
 
      //启动摄像头应用程序
      startActivityForResult(intent, 0);
  }

接收系统拍照的事件的返回结果(1返回图片数据,2返回图片地址)

除了可以根据返回的intent,也可以根据请求码来区别。

对于包含图片数据的,直接将数据转换为bitmap,对于不包含图片数据的这判定为存储在了指定位置。通过uri获取图片路径,在填充到控件背景中。

 @Override
  protected void onActivityResult(int requestCode,int resultCode, Intent data) {
    if (requestCode == TAKE_PICTURE) {
      //检查是否包含缩略图
      if (data != null) {
        if (data.hasExtra("data")) {     //从一个intent接收图片
        	Log.v("系统拍照", "内存中有图片数据");
        	Bitmap thumbnail = data.getParcelableExtra("data");
        	//使用bitmap图片做其他处理
        	imageView.setImageBitmap(thumbnail);
        }
      } else {
    	  Log.v("系统拍照", "内存中没有图片数据");
        //如果没有缩略图,则说明图像存储在目标输出URI中
        int width = imageView.getWidth();
        int height = imageView.getHeight();
        
        BitmapFactory.Options factoryOptions = new BitmapFactory.Options();

        factoryOptions.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(outputFileUri.getPath(), factoryOptions);
          
        int imageWidth = factoryOptions.outWidth;
        int imageHeight = factoryOptions.outHeight;
        
        // 确定将图像缩小多少
        int scaleFactor = Math.min(imageWidth/width, imageHeight/height);
        
        //将图像文件解码为图像大小以填充视图
        factoryOptions.inJustDecodeBounds = false;
        factoryOptions.inSampleSize = scaleFactor;
        factoryOptions.inPurgeable = true;
        
        Bitmap bitmap = BitmapFactory.decodeFile(outputFileUri.getPath(),factoryOptions);
         //使用bitmap图片做其他处理
        imageView.setImageBitmap(bitmap); 
      }
    }
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

腾讯AI架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值