IOS RAW图像获取
RAW 图像获取是ios8加入的新功能,为ios相机服务加入了类似DSLR的RAW格式文件存储。并添加了手动控制快门的功能。官方解读
本文使用到的来自Apple的代码,文本以及图片,版权属于Apple.
RAW Photo Capture in IOS
总体上,RAW图像获取的工作流与正常图像获取的没有太大区别。仅需修改AVCapturePhotoSettings的初始化代码即可。
RAW图像设置
通过AVCapturePhotoSettings::init(rawPixelFormatType: OSType, processedFormat: [String : Any]?)
设置。
rawPixelFormatType
CFA像素排列类型,通过AVPhotoCaptureOutput.availableRawPhotoPixelFormatTypes
获得。
rawFileType
用于存储RAW数据的文件格式,通过AVPhotoCaptureOutput.availableRawPhotoFileFormatTypes
每一种文件格式支持特定的CFA像素排列类型,通过AVPhotoCaptureOutput.supportedRawPhotoPixelFormatTypes(for:)
得知文件格式是否支持该CFA类型。
无法获取RAW像素格式的几种情况
- 在将photoOutput添加到Session前访问
.availableRawPhotoPixelFormatTypes
。 - 使用双后置摄像头时无法获取RAW数据。
- 使用前置摄像头时无法获取RAW数据。
保存RAW与处理后的文件
每当IOS完成一张可使用的图像数据(RAW或处理后),会调用一次photoOutput(_:didFinishProcessingPhoto:error:)
。例如,在RAW拍摄中,一次拍摄会调用2次,一次回传RAW数据,一次回传处理后的数据。当该次拍摄全部回传完成后,系统会调用 photoOutput(_:didFinishCaptureFor:error:)
,这时应当整合该次拍摄的所有数据。
IOS系统可以将JPEG/HEVC和RAW图像绑定存储。当App不能解读该图像的RAW数据时,将会转而调用其JPEG/HEVC格式图像。