Android 拍照获取不压缩原图方式以及存在的问题

2024-05-09 12:48

本文主要是介绍Android 拍照获取不压缩原图方式以及存在的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一般的唤起拍照操作
    //调用相机拍照Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent, key);//在Activity的onActivityResult方法中获取数据@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (data != null) {try {Bundle extras = data.getExtras();if(extras==null){return null;}Bitmap b = (Bitmap) extras.get("data"); } catch (Exception e) {//do }}}

注意
这样获取的图片数据是被系统压缩过的,因为相机拍出的图片有可能非常大,而如果通过Bundle传输中数据过大会导致崩溃

获取未压缩的原图

那怎么样才能获取到拍照的原图呢?通过提前设置一个保存路径,将路径在调用相机的时候传输给系统服务,让系统直接将图片保存到预先定义的文件中,不再通过Bundle传输回来(此时1中onActivityResult方法的data是null)

                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);String fileSaveName = makeFileName();File out = new File(fileSaveName);Uri uri = Uri.fromFile(out);// 获取拍照后未压缩的原图片,并保存在uri路径中intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);startActivityForResult(intent, AddInspectionOrderActivity.KEY_GET_INSPECTION_PHOTO);

通过上述方式就可以使系统将拍照的文件保存到预先设置的文件中,
但是在7.0之后不能够直接通过

Uri uri = Uri.fromFile(out);
来获取文件了,
需要通过Provider来获取

//判断是否存在保存文件的文件夹
String filePath = Environment.getExternalStorageDirectory().toString() + File.separator + “juli/image/”;
FileUtil.isExist(filePath);

这篇关于Android 拍照获取不压缩原图方式以及存在的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973460

相关文章

System类获取系统属性

package com.zhong; import java.util.Properties; /**  *   * @author zhong  *  */ public class SystemPropertyTest {          public static void main(String[] args) {         //启动脚本传递参数         if(args

Spring Boot - 使用类类型信息获取所有已加载的bean

Spring启动会在内部加载大量bean,以最少的配置运行您的应用程序。在这个例子中,我们将学习如何找出所有那些Spring boot加载的bean及其类类型信息。 使用ApplicationContext获取所有已加载的bean 要自动执行方法,当应用程序完全加载时,我正在使用CommandLineRunner接口。CommandLineRunner用于指示bean 在Spring应用程序中

ARM数据处理指令中的立即数问题

CPU的手册上,数据处理指令格式如上: 立即数是Operand2部分,占据了机器码的低12位。其中最低8位称为immed_8,高4位称为rotate_imm。 立即数的数值计算方法:=immed_8 循环右移 (2 * rotate_imm)。 就是说,一个立即数0x56000000,循环左移,如果可以得到一个用8位位图表示的数,则该立即数0x56000000是

Android_04_网络图片查看器

1>不带缓存的图片查看器 MainActivity.java package com.ithiema.imageviewer;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;import jav

Android_03_数据库的使用总结

前言: 1>区分SQL和SQLite SQL 是一门 ANSI 的标准计算机语言,用来访问和操作数据库系统。SQL 语句用于取回和更新数据库中的数据。 SQL 可与数据库程序协同工作,比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以及其他数据库系统。 不幸地是,存在着很多不同版本的 SQL 语言,但是为了与 ANSI 标准相

Android_03_单元测试框架

测试类(用于单元测试之用) package com.itheima.junit.test;import com.itheima.junit.utils.Utils;import android.test.AndroidTestCase;public class TestCase extends AndroidTestCase {public void test(){int result =

Android_02_关于SharePreferences的使用

前言: 我们使用SharePreferences的主要目的是针对一些简单的数据进行存取,其是通过键值对来存取的, 其实质是通过xml文件进行保存的;对于一些简单数据的存取,我们可以用SharePreferences,替代 其他几种复杂的数据存取的方式,比如文件的读写或者数据库的操作; 本示例演示的内容是:通过SharedPreferences来实现记住密码的功能,无需第二次再输入密码

Android_02_文件访问权限(待更新)

前言: 打开 File Explorer可以看到: 10个字母表示的意义: drwxrwxrwx 第一个字母:     * d:表示文件夹     * -:表示文件  第一组rwx:表示的是文件拥有者(owner)对文件的权限     * r:read,读     * w:write     * x:execute  第二组rwx:表示的是跟

Android_02_获取SD卡的可用容量

代码示例如下: package com.itheima.getsdavail;import java.io.File;import android.os.Build;import android.os.Bundle;import android.os.Environment;import android.os.StatFs;import android.app.Activity;i

Android_02_在内部或外部存储中读写文件的操作

前言:  Ram内存:运行内存,相当于电脑的内存  Rom内存:内部存储空间,相当于电脑的硬盘 sd卡:外部存储空间,相当于电脑的移动硬盘 1>在内部存储中读写文件 代码示例如下: package com.itheima.rwinrom;import java.io.BufferedReader;import java.io.File;import java.io.File