Android调用系统相机拍照像素太低以及内存溢出问题

在Android移动开发过程中,如果直接按照原生方式进行拍照经常会出现像素太低(可能只有几十KB),照片非常模糊的问题。
Activity中启动相机的代码:

Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(openCameraIntent, RESUEST_PHOTO);

在返回结果的onActivityResult中直接通过Bitmap bm = (Bitmap) data.getExtras().get(“data”)获取相片:

protected void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode==RESUEST_PHOTO ) {
    switch (requestCode) {
        case RESUEST_PHOTO:
         if (resultCode == RESULT_OK) {
             String fileName = String.valueOf(System.currentTimeMillis());
            Bitmap bm = (Bitmap) data.getExtras().get("data");                      
            break;                  
        default:
            break;
                }
            }
        }

对于这个问题,有一种解决方式是按照xcymorningsun的方法,先将拍得的照片临时保存在本地,在onActivityResult方法中再将图片取出,并经过缩小处理再显示在界面上或将原图上传给服务器。
这种方法对于单张相片有比较好的效果,但对于多张相片则会报出OutOfMemory异常问题。关于OutOfMemory异常问题,cctcc的博客有过比较详细的介绍,有三个需要注意的地方:第一,加载缩略图的时候不要直接使用原始图片;第二,图片使用后要通过recycle()进行资源回收。
回到最初的问题,如果我们想要像微信朋友圈一样连续拍摄多张图片并进行展示的话,应该怎么做呢?
一种解决思路是拍照的时候就将照片保存在本地,并且留出相片的保存地址。之后要展示缩略图或者上传原图就直接调用该地址,此时用到的方法就和在相册中选取相片的方法一样了。具体代码如下。
现定义照片存放的路径:

private String path = "";

启动相机:

Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File file = new File(Environment.getExternalStorageDirectory()
                + "/myimage/", String.valueOf(System.currentTimeMillis())
                + ".jpg");
        path = file.getPath();
        Uri imageUri = Uri.fromFile(file);
        openCameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        startActivityForResult(openCameraIntent, TAKE_PICTURE);

最后在onActivityResult中将照片路径添加到照片路径集中即可。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch (requestCode) {
        case TAKE_PICTURE:
            if (Bimp.drr.size() < 9 && resultCode == -1) {
                Bimp.drr.add(path);
            }
            break;
        }
    }

其中Bimp.drr是ArrayList类型变量。有了照片路径,之后想要对照片进行什么操作就很容易了。照片使用完后如果不再需要的话记得将其删除。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值