我正在尝试在视频中添加 GPUImagePicture
和 GPUImageUIElement
。
GPUImageUIElement
工作正常,但我对 GPUImagePicture
有问题,因为我只在第一帧看到它,然后它就消失了。
这是我的代码:
filter = [[GPUImageBrightnessFilter alloc] init];
[(GPUImageBrightnessFilter *)filter setBrightness:0];
GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
blendFilter.mix = 1.0;
GPUImagePicture *overlay = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"Logo.png"] smoothlyScaleOutput:YES];
GPUImageTransformFilter *transformFilter = [GPUImageTransformFilter new];
[transformFilter forceProcessingAtSize:CGSizeMake(73, 83)];
[transformFilter setAffineTransform:CGAffineTransformMakeScale(0.7, 0.7)];
[overlay addTarget:transformFilter];
[overlay processImage];
UIView *subview1 = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 400)];
UILabel *temperaturaText = [[UILabel alloc]initWithFrame:CGRectMake(77, 100, 105, 60)];
temperaturaText.text = @"test";
[subview1 addSubview:temperaturaText];
uiElementInput = [[GPUImageUIElement alloc] initWithView:subview1];
[filter addTarget:blendFilter];
[uiElementInput addTarget:blendFilter];
[blendFilter addTarget:filterView];
[overlay addTarget:filterView];
__unsafe_unretained GPUImageUIElement *weakUIElementInput = uiElementInput;
[filter setFrameProcessingCompletionBlock:^(GPUImageOutput *filter, CMTime frameTime) {
[weakUIElementInput update];
}];
[blendFilter addTarget:movieWriter];
最佳答案
您的问题是您将 overlay
的输入图片定义为设置方法中的局部变量。您没有持有对它的强引用,因此它会在您完成此方法后立即被释放,这也会从您的处理管道中删除图像纹理及其输出。
如果你想保留一个输入图像,你需要使 overlay
成为你类的一个实例变量,就像你在上面为你的相机或电影输入所做的那样。然后它将持续被框架用作输入。
关于ios - 在视频上添加 GPUImagePicture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23269467/