android raw获取uri_Android 手机如何拍摄RAW图
佳能5D Mark III
专业玩摄影的朋友可能更倾向于使用相机的RAW格式,然后自己做后期处理,而不是直接拍摄JPEG格式的图片。
什么是RAW格式图片
无论是专业的数码相机还是手机的影像系统,Camera的处理流程都是类似的(关于手机的影像系统可参考之前的文章数字成像系统概述):
可以看到RAW格式的图像是由相机感光元件接受的原始图像数据组成,同时包含文件创建时的相机设置和图像处理参数;
而JPEG格式的图像是经过图像处理(如白平衡,锐化,色调和对比度等)后的数据;
为什么专业摄像爱好者偏爱于RAW格式的图片?
除了RAW格式包含的未经处理的原始数据让后期能有更大的操作空间(例如RAW格式文件比JPEG格式在高光和阴影区域能够保留更多的细节,可以在后期将过爆和欠曝的照片拉回正常的曝光范围)外,通常图像软件对RAW格式的任何后期调整都是“非破坏性的”,也就是说不会改变原始文件而是创建了一个新的JPEG或者TIFF格式的图片副本。这样的优势可以让后期制作无限次进行,直到满意为止。
Android手机拍摄RAW图
我们使用Android Camera2的API来拍摄RAW图,关于Camera2的基础可以参考Android Camera2详解
1. 查询是否支持RAW图输出
首先需要查询Camera是否支持直接输出RAW格式的图片,如果没有找到任何一颗摄像头,就需要换一台测试设备了(现在国内的头部手机厂商的中高端机型基本都是支持的)
// We only use a camera that supports RAW. if (!contains(characteristics.get( CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES), CameraCharacteristics.REQUEST_AVAILABLE_CAPABILITIES_RAW)) { continue; }
2. 配置RAW图的输出尺寸
通过ImageFormat.RAW_SENSOR格式从StreamConfigurationMap中查询支持的size列表并选择合适的size
Size largestRaw = Collections.max( Arrays.asList(map.getOutputSizes(ImageFormat.RAW_SENSOR)), new CompareSizesByArea());
3. 配置输出Raw的Surafce
mRawImageReader = ImageReader.newInstance(largestRaw.getWidth(), largestRaw.getHeight(), ImageFormat.RAW_SENSOR, /*maxImages*/ 5);mRawImageReader.setOnImageAvailableListener( mOnRawImageAvailableListener, mBackgroundHandler);
4. 拍照并保存
在拍摄JPEG图片的时候,我们只需要在拿到JPEG数据然后进行保存即可。但是在拍摄RAW图的场景下,拿到原始数据后,还需要保存本次拍照所设置的参数配置信息,并且打包到一个文件中去。
不同专业数码相机厂商的摄像机设置RAW格式后所拍摄的图像文件的后缀名并不一定就是xx.RAW。
各家相机厂商会采用不同的编码方式来记录RAW数据,所以后缀名也不会相同,如下图片都是RAW格式的图片,可以看到格式种类繁多:
过多的RAW格式导致图像处理软件兼容性工作极具挑战性,对软件开发者和摄影师都不友好,为了解决这些冲突,Adobe公司在2004年推出了统一的RAW文件格式DNG(Digital Negative)。DNG的推出受到了不少软件制造商的支持,比如Extensis,Canto,iView等,不少著名的相机制造商,如Leica,三星等也都推出了直接支持DNG的相机。
不过由于该DNG的标准还由Adobe掌控,而不是一个中立的行业标准,导致它的支持覆盖率并不高。
奥林巴斯单反相机部的产品经理John Knaur说:“目前,我们还没有看到这种格式成为一种跨平台的事实标准,它还只是Adobe 控制的一种图片格式” (来自参考资料2)
当然,Android SDK中已经提供了能将原始Camera数据和拍照的配置参数直接封装为DNG文件的工具类DngCreator,我们直接用它来保存RAW图即可
// mCharacteristics:该摄像头的静态配置信息// mCaptureResult:本次拍照的配置信息// mImage:封装的原始图像数据DngCreator dngCreator = new DngCreator(mCharacteristics, mCaptureResult);FileOutputStream output = null;try { output = new FileOutputStream(mFile); dngCreator.writeImage(output, mImage);} catch (IOException e) { e.printStackTrace();} finally { mImage.close(); closeOutput(output);}
使用RedMi K30拍摄RAW图,在手机相册中查看,可以看到具有RAW的标识:
Demo图
将DNG图片导出到电脑,使用Photoshop Camera Raw打开,然后自己后期处理即可
注:
1. 文章演示代码均来自Google官方例子,可github进行搜索或加我好友获取;
2. 文章部分图片来自于网络,侵权请联系进行删除~;
参考
1.【从零开始玩单反 相机参数之RAW格式详解】
http://dcdv.zol.com.cn/259/2596442.html
2.【DNG百度词条】
https://baike.baidu.com/item/.DNG格式/1797443?fr=aladdin
3.【到底什么是RAW格式文件】
https://fotomen.cn/2018/06/28/what-raw/
技术交流或头条内推欢迎扫码添加我的微信:wxid_alaiye
推荐
1. 数字成像系统概述
2. 3A之自动白平衡(AWB)篇
3. Android 11 强制用户使用系统相机?
4. 【Camera效果】高通 AF 搜索与控制机制(MSM8909)
5. JPEG图像是如何进行压缩编码的
觉得不错,点个在看呗~
android raw获取uri_Android 手机如何拍摄RAW图相关推荐
- Android 开发获取当前手机厂商的方法和获取允许后台活动权限
获取当前手机厂商: 1. if (checkPhoneFirm().equals(PhoneConstant.IS_HUAWEI)) {//华为 // getPermisstion("hua ...
- Android 手机如何拍摄RAW图
佳能5D Mark III 专业玩摄影的朋友可能更倾向于使用相机的RAW格式,然后自己做后期处理,而不是直接拍摄JPEG格式的图片. 什么是RAW格式图片 无论是专业的数码相机还是手机的影像系统,Ca ...
- 华为+android+root权限获取root,[Android]如何获取华为手机的root权限
手机根具有许多优点. 在Android系统中,root是系统的唯一超级用户. 植根Android手机后,您可以随意卸载系统随附的许多程序,并且可以自由更改手机的命令以使手机更适合自己使用. 习惯. A ...
- Android实例-获取安卓手机WIFI信息(XE8+小米2)
结果: 1.必须打开Access wifi state权限,不打开权限会出图二的错误. 相关资料: http://blog.csdn.net/lyf_lyf/article/category/1735 ...
- android设备获取 关于手机-》手机名称
BluetoothAdapter myDevice = BluetoothAdapter.getDefaultAdapter(); String deviceName = myDevice.getN ...
- android raw获取uri_音频-获取存储在android的res / raw文件夹中的.mp3文件的URI
音频-获取存储在android的res / raw文件夹中的.mp3文件的URI 我在res / raw文件夹中存储了许多.mp3文件. 我正在使用以下代码获取.mp3文件的URI. Uri.pars ...
- Android开发实战《手机安全卫士》——5.“高级工具”模块实现 获取经纬度 锁屏 卸载
文章目录 1.手机防盗--接收短信播放音乐 2.手机防盗--定位方式 3.手机防盗--获取经纬度坐标 4.手机防盗--设备管理器使用 5.手机防盗--锁屏 & 数据清除 & 卸载 6. ...
- Android之获取手机基本信息、内存信息、网路信息、电池信息,等一共18项数据
获取手机信息,代码复制可用,开发工具为:Android Studio 1.手机品牌 2.手机型号 3.屏幕分辨率 4.像素密度 5.屏幕尺寸 6.Android 系统版本 7.运行内存 8.储存空间 ...
- Android适配 获取手机屏幕的分辨率
如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情. 首先:你需要在AndroidManifest.xml文件的<man ...
最新文章
- Ubuntu16.04 下的网易云出现网络异常、无法播放,界面无响应问题的统一解决
- 【spring】di(依赖注入)使用实例
- 【PHP 开发】mac 下配置 PHP 环境的方法
- HTML——CSS的基础语法2
- [css] 你有用过弹性布局吗?说说你对它的理解
- python 模拟浏览器selenium_使用Selenium模拟浏览器,实现自动爬取数据
- Unity 血条跟随效果
- _wsplitpath_s
- mt4代理服务器存放文件,MT4指标EA DLL等文件放置目录
- android 动态壁纸 例子,android 动态壁纸实例(1)【转】
- sparkSQL写入hive报错:Exception thrown when executing query
- 天地波超视距雷达在远洋无人航运中的运用
- FlyoutMenus
- ClickHouse基本语法及常见存储引擎
- VUE-鼠标移入到目标区域变成小手模样
- .net framework 官方下载地址
- 塑胶模具设计:从材料优缺点来看塑料特性
- H5图片高度根据宽度自适应
- 拉格朗日插值、分段线性插值、三次样条插值
- 【CEC2017】CEC2017优化算法目标测试函数综述以及CEC2017的matlab实现