CIFilter filterWithCVPixelBuffer在iOS中返回nil

时间:2019-01-22 16:07:07

标签: ios camera core-image cifilter

我正在尝试使用filterWithCVPixelBuffer创建一个CIFilter,并且返回nil。 这就是我想要做的:

CFDictionaryRef options = CMCopyDictionaryOfAttachments(nil, photo.pixelBuffer, kCMAttachmentMode_ShouldPropagate);
CIFilter * ciFilter = [CIFilter filterWithCVPixelBuffer:photo.pixelBuffer properties:(__bridge NSDictionary*)options options:nil];

photo是提供给委托的AVCapturePhoto的实例。 我正在使用iOS 12,并在iPhone7上运行代码。

2 个答案:

答案 0 :(得分:0)

认为我在头文件的文档中找到了答案:

  

返回一个CIFilter,该CIFilter随后将返回经过正确处理的CIImage作为“ outputImage”。

     

请注意,使用此初始值设定项时,您应传入CVPixelBufferRef,其具有以下Raw像素格式类型之一,即kCVPixelFormatType_14Bayer_GRBG,kCVPixelFormatType_14Bayer_RGGB,kCVPixelFormatType_14Bayer_BGGR,kCVPixelFormatType_14Bayer_GBRG 和CMS根属性

因此,我想当您有CMSampleBuffer时应使用此方法,而从AVCapturePhoto来时则不可行。

答案 1 :(得分:0)

问题出在属性NSDictionary中。我应该简单地通过photo.metadata。 因此,函数调用如下所示:

CIFilter * ciFilter = [CIFilter filterWithCVPixelBuffer:photo.pixelBuffer properties:photo.metedata options:nil];

当然,您可以传递包含所需NSDictionary的{​​{1}}。