Android实现拍照截取和相册图片截取
关于拍照截取和相册截取,看了网上很多资料,自己整理了一份比较详细的,供有需要的人参考
1 拍照
原理就是通过intent调用系统的相机,拍完照在回调进行操作,成功获取到拍完照的图片根据uri调用系统的裁剪页面,裁剪完也是在回调中进行处理,显示在页面的imageview中。
2 相册选取图片
原理也是通过intent打开系统的图片,用户选择完成以后在回调中根据图片的uri调用系统的裁剪页面,同上。
首先,定义几个常量
publicstaticfinalintTAKE_PHOTO=1; publicstaticfinalintCROP_PHOTO=2; publicstaticfinalintACTION_CHOOSE=3; privateUriimageUri;//图片路径 privateStringfilename;//图片名称
然后在拍照和相册选择的按钮中处理事件
@Override
publicvoidonClick(Viewv){
switch(v.getId()){
caseR.id.bt1://拍照截取
SimpleDateFormatformat=newSimpleDateFormat("yyyyMMddHHmmss");
Datedate=newDate(System.currentTimeMillis());
filename=format.format(date);
Filepath=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
FileoutputImage=newFile(path,filename+".jpg");
try{
if(outputImage.exists()){
outputImage.delete();
}
outputImage.createNewFile();
}catch(IOExceptione){
e.printStackTrace();
}
//将File对象转换为Uri并启动照相程序
imageUri=Uri.fromFile(outputImage);
Intentintent=newIntent(MediaStore.ACTION_IMAGE_CAPTURE);//照相
intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri);//指定图片输出地址
startActivityForResult(intent,TAKE_PHOTO);//启动照相
break;
caseR.id.bt2://相册选取
Intentintent2=newIntent(Intent.ACTION_PICK);
intent2.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,"image/*");
startActivityForResult(intent2,ACTION_CHOOSE);
break;
}
}
最主要的在回调中的执行
//使用startActivityForResult返回结果时调用的方法
@Override
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentdata){
super.onActivityResult(requestCode,resultCode,data);
if(resultCode!=RESULT_OK){
Toast.makeText(this,"取消了",Toast.LENGTH_SHORT).show();
return;
}
switch(requestCode){
caseTAKE_PHOTO://拍照的回调
cropImage();
break;
caseACTION_CHOOSE://选择照片的回调
imageUri=data.getData();
cropImage();
break;
caseCROP_PHOTO://裁剪完照片的回调
showPic();
break;
default:
break;
}
}
裁剪图片的方法
/**
*裁剪图片
**/
privatevoidcropImage(){
Intentintent=newIntent("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();
//广播刷新相册
IntentintentBc=newIntent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
intentBc.setData(imageUri);
this.sendBroadcast(intentBc);
startActivityForResult(intent,CROP_PHOTO);//设置裁剪参数显示图片至ImageView
}
过程比较简单,可能会有一些判断的地方没有处理,如果有不对的地方希望有高手可以帮忙改进,谢谢~~
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。