由于我在尝试将混合滤镜应用于图像并显示时遇到的崩溃,我感到头疼。 我想要做的只是将叠加图像放到另一个图像上。
这是我的代码:
- (GPUImageOutput<GPUImageInput> *)myFilter
{
GPUImageFilterGroup *filtersGroup = [GPUImageFilterGroup new];
// Saturation
GPUImageSaturationFilter *saturationFilter = [GPUImageSaturationFilter new];
saturationFilter.saturation = 0.0;
[filtersGroup addFilter:saturationFilter];
// Noise
UIImage *noiseImage = [UIImage imageNamed:@"noise.png"];
GPUImagePicture *noisePicture = [[GPUImagePicture alloc] initWithImage:noiseImage];
GPUImageAddBlendFilter *blend = [GPUImageAddBlendFilter new];
[blend useNextFrameForImageCapture];
[filtersGroup addFilter:blend];
[noisePicture addTarget:blend atTextureLocation:1];
[noisePicture processImage];
[saturationFilter addTarget:blend];
filtersGroup.initialFilters = @[saturationFilter];
filtersGroup.terminalFilter = blend;
return filtersGroup;
}
// Applying filter
GPUImageOutput <GPUImageInput> *effect = [self myFilter];
self._photoHandle = [[GPUImagePicture alloc] initWithImage:staticImage];
[self._photoHandle addTarget:effect];
[effect addTarget:self.targetPreviewView];
[self._photoHandle processImage]; // Crash
当我尝试运行它时,应用程序崩溃,我收到此消息:
由于未捕获的异常而终止应用 &#39; NSInternalInconsistencyException&#39;,原因:&#39;试图过度发布a framebuffer,你忘了调用-useNextFrameForImageCapture吗? 在使用-imageFromCurrentFramebuffer之前?&#39;
我打电话&#39; useNextFrameForImageCapture&#39;在混合过滤器上,我的代码出了什么问题?
答案 0 :(得分:7)
哎呀,我发现了导致车祸的原因。
请注意,我没有对noisePicture对象进行任何强引用。 替换:
GPUImagePicture *noisePicture
与
@property (nonatomic, strong) GPUImagePicture *noisePicture;
...
self.noisePicture = ...
解决了这个问题。感谢帮助! :)