欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2024-03-31 11:37:58
关于拍照截取和相册截取,看了网上很多资料,自己整理了一份比较详细的,供有需要的人参考 1  拍照 原理就是通过intent调用系统的相机,拍完照在回调进行...

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

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 
} 

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

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