博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android调用系统相机拍照保存照片很小解决方案
阅读量:6115 次
发布时间:2019-06-21

本文共 4075 字,大约阅读时间需要 13 分钟。

保存图片小的一般操作步骤:

1. 调用系统相机

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent, 1);

2. 保存照片

@Override  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub   super.onActivityResult(requestCode, resultCode, data);   System.out.println("onActivityResult start");      if (resultCode == Activity.RESULT_OK) {
   System.out.println("enter");         String sdStatus = Environment.getExternalStorageState();          if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用              Log.i("TestFile",                      "SD card is not avaiable/writeable right now.");             System.out.println("SD card is not avaiable/writeable right now.");             return;          }          String name = System.currentTimeMillis() + ".jpg";;             //Toast.makeText(this, name, Toast.LENGTH_LONG).show();          Bundle bundle = data.getExtras();          Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式                FileOutputStream b = null;          File file = new File("/mnt/sdcard/DCIM/Camera/");          file.mkdirs();// 创建文件夹          System.out.println("mkdirs");         String fileName = "/mnt/sdcard/DCIM/Camera/"+name;                try {                  b = new FileOutputStream(fileName);                  bitmap.compress(Bitmap.CompressFormat.JPEG, 100, b);// 把数据写入文件          } catch (FileNotFoundException e) {              e.printStackTrace();         } finally {              try {                  b.flush();                  b.close();              } catch (IOException e) {                  e.printStackTrace();             }          }   

小图片的造成的原因,从返回值中取照片的数据是已经被压缩了,要想不被压缩我们可以在调用系统相机时指定照片的保存位置

 private String camera_path = Environment.getExternalStorageDirectory().toString() + "/Photo_LJ/";//照片保存位置

 private String camera_photo_name;// 保存的名称

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);        File path1 = new File(camera_path);        if (!path1.exists()) {            path1.mkdirs();        }        camera_photo_name = System.currentTimeMillis() + ".jpg";        File file = new File(path1, camera_photo_name);        // mOutPutFileUri = Uri.fromFile(file);        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));        startActivityForResult(intent, 1);

重载方法

@Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        switch (requestCode) {        case TAKE_PICTURE:            if (resultCode == RESULT_OK)                 String filename = camera_path + "/" + camera_photo_name;                Bitmap bm = compressImageFromFile(filename);                ImageItem takePhoto = new ImageItem();                takePhoto.setBitmap(bm);                Bimp.tempSelectBitmap.add(takePhoto);            }            break;        }

照片很大,要显示出来我们最好对它进行一下压缩

private Bitmap compressImageFromFile(String srcPath) {        BitmapFactory.Options newOpts = new BitmapFactory.Options();        newOpts.inJustDecodeBounds = false;// 只读边,不读内容        Bitmap bitmap = BitmapFactory.decodeFile(srcPath, null);        newOpts.inJustDecodeBounds = false;        int w = newOpts.outWidth;        int h = newOpts.outHeight;        float hh = 800f;//        float ww = 480f;//        int be = 1;        if (w > h && w > ww) {            be = (int) (newOpts.outWidth / ww);        } else if (w < h && h > hh) {            be = (int) (newOpts.outHeight / hh);        }        if (be <= 0)            be = 1;        newOpts.inSampleSize = be;// 设置采样率        // newOpts.inPreferredConfig = Config.ARGB_8888;//该模式是默认的,可不设        newOpts.inPurgeable = true;// 同时设置才会有效        newOpts.inInputShareable = true;// 。当系统内存不够时候图片自动被回收        bitmap = BitmapFactory.decodeFile(srcPath, newOpts);        // return compressBmpFromBmp(bitmap);//原来的方法调用了这个方法企图进行二次压缩        // 其实是无效的,大家尽管尝试        return bitmap;    }

 

好了,可以到照片保存的位置检查一下了,已经是2M左右大小的照片了。

 

转载于:https://www.cnblogs.com/wicrecend/p/4865154.html

你可能感兴趣的文章
Quartz2D之着色器使用初步
查看>>
多线程条件
查看>>
Git [remote rejected] xxxx->xxxx <no such ref>修复了推送分支的错误
查看>>
Porter/Duff,图片加遮罩setColorFilter
查看>>
黄聪:VMware安装Ubuntu10.10【图解】转
查看>>
Centos 6.x 升级openssh版本
查看>>
公式推♂倒题
查看>>
vue实现点击展开,点击收起
查看>>
如何使frame能居中显示
查看>>
第k小数
查看>>
构建之法阅读笔记三
查看>>
Python/PHP 远程文件/图片 下载
查看>>
【原创】一文彻底搞懂安卓WebView白名单校验
查看>>
写给对前途迷茫的朋友:五句话定会改变你的人生
查看>>
并行程序设计学习心得1——并行计算机存储
查看>>
JAVA入门到精通-第86讲-半双工/全双工
查看>>
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>