由于我在尝试将混合滤镜应用于图像并显示它时遇到的崩溃,我感到头疼.我想要做的只是将叠加图像放到另一个图像上.
这是我的代码:
- (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;
}
Run Code Online (Sandbox Code Playgroud)
// 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
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,应用程序崩溃,我收到此消息:
由于未捕获的异常'NSInternalInconsistencyException'终止应用程序,原因:'试图过度发布帧缓冲区,你是否忘记在使用-imageFromCurrentFramebuffer之前调用-useNextFrameForImageCapture?'
我在混合过滤器上调用'useNextFrameForImageCapture',那么我的代码有什么问题?
唉,我发现了造成撞车事故的原因.
请注意,我没有对noisePicture对象进行任何强引用.更换:
GPUImagePicture *noisePicture
Run Code Online (Sandbox Code Playgroud)
同
@property (nonatomic, strong) GPUImagePicture *noisePicture;
...
self.noisePicture = ...
Run Code Online (Sandbox Code Playgroud)
解决了这个问题.感谢帮助!:)
| 归档时间: |
|
| 查看次数: |
1619 次 |
| 最近记录: |