700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > android调用相机返回大图 Android调用相机拍照返回原图

android调用相机返回大图 Android调用相机拍照返回原图

时间:2022-07-30 09:48:21

相关推荐

android调用相机返回大图 Android调用相机拍照返回原图

在开始之前,先说下正常调用相机的状况:

正常调用相机,在

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

startActivityForResult(intent, REQUEST_CODE);

然后重写onActivityResult

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

}

}

在返回的data中的是一个压缩过的Bitmap,而且压缩的比较厉害,所以根本不会产生OOM异常,我试过之后,确实是一个清晰度相当低的一张图片,根本不能满足需求,所以就需要返回原图!!!当然这个原图是需要处理的,否则依然会出现OOM。

切入正题

首先理下思路:

1.定义一个Uri用来标记相机拍摄的照片

2.通过Intent启动相机,同时传递Uri

3.在onActivityResult方法中获取到拍摄图片的Uri,就能找到我们拍摄的原图

需要注意的是:

有的手机的Uri此时传递回onActivityResult时,通过data. getData()时为空,这时可以用一个变量引用之前的Uri 就好了

权限问题

启动相机代码:

String state = Environment.getExternalStorageState();

if (state.equals(Environment.MEDIA_MOUNTED)) {

File file = new File(path);

if (!file.exists()) {

file.mkdir();

}

String fileName = getPhotoFileName() + ".jpg";

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

photoUri = Uri.fromFile(new File(path + fileName));

intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);

startActivityForResult(intent, REQUEST_CODE);

}

path:系统相册的路径

private String path = Environment.getExternalStorageDirectory() +

File.separator + Environment.DIRECTORY_DCIM + File.separator;

"Environment.DIRECTORY_DCIM" 可以ctrl点进去看下,其实就是一个字符串,只不过是系统定义的,如下:

public static String DIRECTORY_DCIM = "DCIM";

getPhotoFileName():这个方法主要是实现对图片的命名,按照时间来命名,代码如下:

private String getPhotoFileName() {

Date date = new Date(System.currentTimeMillis());

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss");

return "IMG_" + dateFormat.format(date);

}

onActivityResult回调的代码:

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

if (resultCode != RESULT_OK) {

return;

}

if (requestCode == REQUEST_CODE) {

Log.d(TAG, "开始回调");

Uri uri = null;

if (data != null && data.getData() != null) {

uri = data.getData();

}

if (uri == null) {

if (photoUri != null) {

uri = photoUri;

}

}

}

其中photoUri,这里我定义了一个全局变量,和“启动相机”里面的Uri是同一个变量

Uri photoUri;

接下来,我们可以通过seturi()方法来设置UI

mImageView.setImageURI(photoUri);

同时这里也是需要注意:

由于现在手机像素都很高,拍摄的照片都很大,几M左右,这时如果直接设置到UI中,有时候会遇到OOM异常,接下来就是压缩图片的问题了

如有问题请拍砖

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。