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

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

}

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

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

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐