Android实现拍照截取和相册图片截取

所属分类: 软件编程 / Android 阅读数: 48
收藏 0 赞 0 分享

关于拍照截取和相册截取,看了网上很多资料,自己整理了一份比较详细的,供有需要的人参考

1  拍照

原理就是通过intent调用系统的相机,拍完照在回调进行操作,成功获取到拍完照的图片根据uri调用系统的裁剪页面,裁剪完也是在回调中进行处理,显示在页面的imageview中。

2  相册选取图片

原理也是通过intent打开系统的图片,用户选择完成以后在回调中根据图片的uri调用系统的裁剪页面,同上。

首先,定义几个常量

public static final int TAKE_PHOTO = 1; 
public static final int CROP_PHOTO = 2; 
public static final int ACTION_CHOOSE=3; 
private Uri imageUri; //图片路径 
private String filename; //图片名称 

然后在拍照和相册选择的按钮中处理事件

@Override 
  public void onClick(View v) { 
    switch (v.getId()) { 
      case R.id.bt1:  //拍照截取 
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); 
        Date date = new Date(System.currentTimeMillis()); 
        filename = format.format(date); 
        File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); 
        File outputImage = new File(path, filename +".jpg"); 
        try { 
          if (outputImage.exists()) { 
            outputImage.delete(); 
          } 
          outputImage.createNewFile(); 
        } catch (IOException e) { 
          e.printStackTrace(); 
        } 
        //将File对象转换为Uri并启动照相程序 
        imageUri = Uri.fromFile(outputImage); 
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //照相 
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //指定图片输出地址 
        startActivityForResult(intent, TAKE_PHOTO); //启动照相 
        break; 
      case R.id.bt2:  //相册选取 
        Intent intent2 = new Intent(Intent.ACTION_PICK); 
        intent2.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*"); 
        startActivityForResult(intent2,ACTION_CHOOSE); 
        break; 
    } 
  } 

最主要的在回调中的执行

// 使用startActivityForResult返回结果时调用的方法 
  @Override 
  protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode!=RESULT_OK){ 
      Toast.makeText(this, "取消了", Toast.LENGTH_SHORT).show(); 
      return; 
    } 
    switch (requestCode) { 
      case TAKE_PHOTO:  //拍照的回调 
        cropImage(); 
        break; 
      case ACTION_CHOOSE:  //选择照片的回调 
        imageUri = data.getData(); 
        cropImage(); 
        break; 
      case CROP_PHOTO:  //裁剪完照片的回调 
        showPic(); 
        break; 
      default: 
        break; 
    } 
  } 

裁剪图片的方法

/** 
 * 裁剪图片 
 **/ 
private void cropImage() { 
  Intent intent = new Intent("com.android.camera.action.CROP"); //剪裁 
  intent.setDataAndType(imageUri, "image/*"); 
  intent.putExtra("scale", true); 
  //设置宽高比例 
  intent.putExtra("aspectX", 1); 
  intent.putExtra("aspectY", 1); 
  //设置裁剪图片宽高 
  intent.putExtra("outputX", 340); 
  intent.putExtra("outputY", 340); 
  intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
  Toast.makeText(MainActivity.this, "剪裁图片", Toast.LENGTH_SHORT).show(); 
  //广播刷新相册 
  Intent intentBc = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); 
  intentBc.setData(imageUri); 
  this.sendBroadcast(intentBc); 
  startActivityForResult(intent, CROP_PHOTO); //设置裁剪参数显示图片至ImageView 
} 

过程比较简单,可能会有一些判断的地方没有处理,如果有不对的地方希望有高手可以帮忙改进,谢谢~~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Android网络编程之获取网络上的Json数据实例

这篇文章主要介绍了Android网络编程之获取网络上的Json数据实例,本文用完整的代码实例讲解了在Android中读取网络中Json数据的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中的windowSoftInputMode属性详解

这篇文章主要介绍了Android中的windowSoftInputMode属性详解,本文对windowSoftInputMode的9个属性做了详细总结,需要的朋友可以参考下
收藏 0 赞 0 分享

Android网络编程之UDP通信模型实例

这篇文章主要介绍了Android网络编程之UDP通信模型实例,本文给出了服务端代码和客户端代码,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中使用ListView实现漂亮的表格效果

这篇文章主要介绍了Android中使用ListView实现漂亮的表格效果,本文用详细的代码实例创建了一个股票行情表格,需要的朋友可以参考下
收藏 0 赞 0 分享

Android中刷新界面的二种方法

这篇文章主要介绍了Android中刷新界面的二种方法,本文使用Handler、postInvalidate两种方法实现界面刷新,需要的朋友可以参考下
收藏 0 赞 0 分享

Android SDK三种更新失败及其解决方法

这篇文章主要介绍了Android SDK三种更新失败及其解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(一)

Android3.0(API level 11)开始,Android设备不再需要专门的菜单键。随着这种变化,Android app应该取消对传统6项菜单的依赖。取而代之的是提供anction bar来提供基本的用户功能
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(二)

这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu)
收藏 0 赞 0 分享

Android学习笔记——Menu介绍(三)

今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习,需要的朋友可以参考下
收藏 0 赞 0 分享

Android显示网络图片实例

这篇文章主要介绍了Android显示网络图片的方法,以实例形式展示了Android程序显示网络图片的方法,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多