关于拍照截取和相册截取,看了网上很多资料,自己整理了一份比较详细的,供有需要的人参考
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实现拍照截图功能,包括了Android实现拍照截图功能的使用技巧和注意事项,需要的朋友参考一下 本文将向大家展示如何拍照截图。 先看看效果图: 拍照截图有点儿特殊,要知道,现在的Android智能手机的摄像头都是几百万的像素,拍出来的图片都是非常大的。因此,我们不能像对待相册截图一样使用Bitmap小图,无论大图小图都统一使用Uri进行操作。 一、首先准备好需要使用到的
本文向大家介绍Android实现拍照、选择相册图片并裁剪功能,包括了Android实现拍照、选择相册图片并裁剪功能的使用技巧和注意事项,需要的朋友参考一下 通过拍照或相册中获取图片,并进行裁剪操作,然后把图片显示到ImageView上。 当然也可以上传到服务器(项目中绝大部分情况是上传到服务器),参考网上资料及结合项目实际情况, 测试了多款手机暂时没有发现严重问题。代码有注释,直接贴代码: 布
本文向大家介绍Android实现拍照及图片显示效果,包括了Android实现拍照及图片显示效果的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android拍照及图片显示的具体代码,供大家参考,具体内容如下 1、功能声明 当应用需要使用相机、NFC等外设时,需要在AndroidManifest.xml中进行声明。 这样,当设备缺少这些外设时,应用商店的安装程序可以拒绝安装设备。 声明
本文向大家介绍Android实现拍照、选择图片并裁剪图片功能,包括了Android实现拍照、选择图片并裁剪图片功能的使用技巧和注意事项,需要的朋友参考一下 一、 实现拍照、选择图片并裁剪图片效果 按照之前博客的风格,首先看下实现效果。 二、 uCrop项目应用 想起之前看到的Yalantis/uCrop效果比较绚,但是研究源码之后发现在定制界面方面还是有一点的限制,于是在它的基础上做了修
ap.chooseImage(OPTION | count, CALLBACK) 拍照或从手机相册中选择图片。可直接传入一个数字作为 OPTION.count 参数。 OPTION 参数说明 名称 类型 必选 描述 count Number 否 最大可选照片数,默认1张,上限9张 sourceType String Array 否 相册选取或者拍照,默认 ['camera','album'] CA