gpt4 book ai didi

iphone - 使用相机拍摄多张照片时,如何检查是否有足够的内存来处理 UIImagePickerController 捕获的图片?

转载 作者:行者123 更新时间:2023-12-03 20:58:11 25 4
gpt4 key购买 nike

我正在编写一个应用程序,它使用 UIImagePickerController 以 iOS 允许的速度用相机拍摄多张照片。我的应用程序必须在所有版本的 iPhone 硬件(v1 到 4)上的 iOS 3.13 上运行。我正在使用带有cameraOverlayView的UIImagePickerController。

我的问题是,如何根据可用内存以编程方式确定一次可以处理多少张照片?请参阅下面的更多细节。如有任何帮助,我们将不胜感激!

当 imagePicker 委托(delegate)接收到 imagePicker:didFinishPickingMediaWithInfo: 时,委托(delegate)使用 UIImageWriteToSavedPhotosAlbum() 将全尺寸图像保存在 savingPhotosAlbum 中。一旦我解决了这个问题,应用程序将使用全尺寸图像执行更多操作。

作为测试,我会尽可能快地拍照。最终,正如预期的那样,由于保存到相册时内存中存在大量照片,该应用程序收到了内存警告。如果我忽略内存警告并继续拍照,最终该应用程序会被 iOS b/c 杀死。

我对允许应用程序一次处理的并发照片数量设置限制没有任何问题。每个 iPhone HW 版本都有不同的内存容量和不同的相机分辨率。对于 iOS 4,多任务处理也可能会影响可用内存。我宁愿以编程方式执行此操作,也不愿根据硬件版本硬编码限制。

显示此行为的测试应用程序位于 Source Code

最佳答案

对限制进行硬编码更容易。

没有简单的方法可以找出“可用内存”是多少,因为如果出现内存警告,或者手机决定终止各种后台应用程序(即 Safari),可能会突然释放更多内存。有 NSRealMemoryAvailable(),但它可能只返回已安装的 RAM(并且可能是 [NSProcessInfophysicalMemory] ​​使用的)。

您可以尝试将图像保存在队列中 - 一次保存一张图像可能会使用更少的内存。您还可以在收到内存警告时向队列中添加标记,并在有多个时禁用图像保存(理想情况下,如果收到“2 级”或“3 级”内存警告,您希望停止拍照,但同时这些被打印到控制台,我不知道有什么简单的方法来检查代码。大概你想在内存未警告时恢复,但这些也不存在)。

另请注意,您可以通过通知获取原始 JPEG 数据(在某些操作系统版本上);我忘记了名字是什么,但 userInfo 键是@“AVCaptureNotificationInfo_JPEGData”。如果您保存原始 JPEG 数据,您也许可以稍后对其进行处理。

我认为 UIImageWriteToSavedPhotosAlbum() 愚蠢地解压缩相机返回的 JPEG 并重新压缩它,但我可能是错的。相机图像只有 1-2 MB 左右,因此您应该能够拍摄足够多的图像而不会崩溃,但在我的测试中情况并非如此。

关于iphone - 使用相机拍摄多张照片时,如何检查是否有足够的内存来处理 UIImagePickerController 捕获的图片?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3461838/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com