我有一张正在使用AVFoundation
的照片应用。一旦捕获了图像,我就必须运行2种核心图形方法才能正确旋转和裁剪图像。
使用会话预设为AVCaptureSessionPresetPhoto
的{{3}}对此进行测试时,我总是收到大量的内存警告,我花了两周时间尝试解决这些问题,最后我放弃了。
我最终放弃了典型的captureStillImageAsynchronouslyFromConnection
设置并使用另一个“捕获”视频帧的设置。这种新方法效果很好,最终图像质量与AVCaptureSessionPresetPhoto
产生的旧图像质量相匹配,图像的分辨率要小得多,因此我不再处理内存问题或警告。
图像旋转和裁剪现在几乎立即发生,几乎完全不明显,因为新尺寸要小得多。
据我所知,唯一的区别是,AVCaptureSessionPresetPhoto
会产生分辨率为2448 x 3264
的照片,而我的新方法会产生852 x 640
的分辨率看似相同。
然而,由于这种新方法在技术上并不执行真正的“相机捕捉”,我将不得不花一些时间添加相机声音效果,以编程方式调用闪光灯/手电筒来添加闪光灯功能等。在此之前从这条定制之路开始,我决定重新审视开发人员在使用AVFoundation
捕获照片时通常使用的旧设置。
以下是我正在谈论的“典型”设置的链接:typical AVFoundation setup for capturing camera photos
我最后一次测试了所有会话预设,但没有一个像AVCaptureSessionPresetPhoto
那样工作。分辨率要么太小,要么分辨率可能会有效,但预览会放大,这是不可接受的。
还有其他选择吗?我可以在某些预设中禁用缩放吗?或者我可以自定义AVCaptureSessionPresetPhoto
预设的实际图像大小吗?我可以从头开始创建新的自定义预设并添加吗?
我一直在寻找答案,但似乎大多数人只是建议使用可用的默认预设。