android 6相机源码,开源中国 OsChina Android 客户端源码分析(6)拍照、图库、裁剪...

1开源中国 OsChina Android 客户端源码拍照、图库、裁剪分析代码在net.oschina.app.fragment包下,MyInformationFragmentDetail类中;

2该类实现了两种设置用户图像的方法:从图册选择以及拍照获取图片;

3对获取到的图片进行裁剪处理,以获取用户指定大小的图片;

4拍照分析:拍照的核心代码,通过意图调用系统API 进行拍照

intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);

startActivityForResult(intent,ImageUtils.REQUEST_CODE_GETIMAGE_BYCAMERA);

这里的uri 是和拍照后图片相对应的资源标识符,也就是拍照后的照片的保存位置,源码中是将照片在SD卡中指定目录下以时间命名jpg格式来保存图片的。所以在startTakePhoto()函数中,首先进行了SD卡相关情况的判断,以及文件名和uri的生成,然后进行拍照。

拍照以后,在onActivityResult()中对保存在上述uri中的图片进行裁剪。这就是为什么会声明一个全局的origUri

5裁剪分析,使用裁剪时一个是裁剪框的长宽比,裁剪大小,裁剪后去黑边的设置,这里的data参数实际上就是上述拍照后保存的图片所对应的uri.这句代码 intent.putExtra("output", this.getUploadTempFile(data));实际上是将裁剪后的图片保存在指定的URI中.

private void startActionCrop(Uri data) {

Intent intent = new Intent("com.android.camera.action.CROP");

intent.setDataAndType(data, "image/*");

intent.putExtra("output", this.getUploadTempFile(data));

intent.putExtra("crop", "true");

intent.putExtra("aspectX", 1);// 裁剪框比例

intent.putExtra("aspectY", 1);

intent.putExtra("outputX", CROP);// 输出图片大小,用户自定义大小

intent.putExtra("outputY", CROP);

intent.putExtra("scale", true);// 去黑边

intent.putExtra("scaleUpIfNeeded", true);// 去黑边

startActivityForResult(intent,

ImageUtils.REQUEST_CODE_GETIMAGE_BYSDCARD);

}

6 从图库选择,这里需要注意4.4以下和以上调用系统相册的意图不同,获取后,在onActivityResult()中通过意图获取选择的图片,然后同上进行图片裁剪。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值