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像素格式的几种情况

Stackoverflow原文连接

  1. 在将photoOutput添加到Session前访问.availableRawPhotoPixelFormatTypes
  2. 使用双后置摄像头时无法获取RAW数据。
  3. 使用前置摄像头时无法获取RAW数据。

保存RAW与处理后的文件

每当IOS完成一张可使用的图像数据(RAW或处理后),会调用一次photoOutput(_:didFinishProcessingPhoto:error:) 。例如,在RAW拍摄中,一次拍摄会调用2次,一次回传RAW数据,一次回传处理后的数据。当该次拍摄全部回传完成后,系统会调用 photoOutput(_:didFinishCaptureFor:error:),这时应当整合该次拍摄的所有数据。

IOS系统可以将JPEG/HEVC和RAW图像绑定存储。当App不能解读该图像的RAW数据时,将会转而调用其JPEG/HEVC格式图像。