ios - AVCaptureSession didReceiveMemoryWarning

标签 ios uiimage format avcapturesession didreceivememorywarning

当 AVCaptureSession 的 session 运行到本地 NSMutableArray 中捕获图像时,我收到 didReceiveMemoryWarning 调用。稍作测试后,我发现它发生在 ARRAY 达到一定数量时。

我假设这是因为我使用 UIImage 作为我添加到数组的对象类型。 保存这些图像的最佳格式是什么?

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {

CVPixelBufferRef pixel_buffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixel_buffer];
CGImageRef ref = [self.context createCGImage:ciImage fromRect:ciImage.extent]; 

UIImage *image = [UIImage imageWithCGImage:ref scale:1.0 orientation:UIImageOrientationRight];

CGImageRelease(ref);

[self.capturingImageView performSelectorOnMainThread:@selector(setImage:) withObject:image waitUntilDone:YES];
if (saveImages == YES) { //this a BOOL value that becomes YES when the user clicks the RECORDING button.
    [dImagesArray addObject:image];
}
}

最佳答案

您可以将图像保存为最适合您需要的任何格式:这可能是 JPG 或 PNG。前者较小,但有损,后者无损。因此,如果图像质量对您来说极其重要,请使用 PNG。如果没有,我会使用 JPG(这将具有占用更少磁盘空间的额外优势)。

您目前没有将任何图像保存到磁盘,只是将它们保存在内存中的数组中,这就是导致您出现问题的原因。您可以通过多种方式处理此问题,具体取决于您希望您的应用执行的操作。您需要将图像保存到磁盘吗?如果是这样,可以在任何时候对内存中允许的图像数量设置限制,并在需要时将它们转储到磁盘。或者您可能只是对图像进行一些分析,在这种情况下,您可以在不再需要它们时释放它们。

关于ios - AVCaptureSession didReceiveMemoryWarning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14040145/

相关文章:

iphone - 如何在线程中执行 GUI 操作 - IOS

ios - 子类 UIWebView 以附加每个链接(在 Swift 中)

ios - 在缩小按钮图像的同时放大按钮?

ios - PHImageManager 由于从照片库编辑而错误地获取照片

mysql - SQL TIME 更改数据库中的格式?

ios - 如何计算所有类被调用的次数

iphone - 模糊效果在模拟器中正常工作,但在设备中却无法正常工作

java - 防止 java 本地化 SimpleDateFormat 输出

java - Apache poi - 千位分隔符

ios - Xamarin.iOS 未看到对 iOS 绑定(bind)库的引用