虚位以待(AD)
虚位以待(AD)
首页 > 软件编程 > Android编程 > Android实现拍照截取和相册图片截取

Android实现拍照截取和相册图片截取
类别:Android编程   作者:码皇   来源:互联网   点击:

这篇文章主要为大家详细介绍了Android实现拍照截取和相册获取图片截取,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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裁剪图片 Android拍照截取 Android