我使用的是GPUImage library
here,并且有很多样本可以提供帮助,但我在使用过滤器时发现了一件事,它可以与GPUImageVideoCamera
一起使用。我试图在已录制的视频上应用过滤器,过滤器工作正常,但是当我尝试更改过滤器的值时,它没有反映出来,因为我没有使用GPUImageVideoCamera
,因为我没有必须录制视频,但我必须实现过滤器预览,然后应用所选过滤器并创建一个新电影。
下面我将介绍一些代码
- (void)viewDidLoad
{
[super viewDidLoad];
//Creating Filter
filter=[[GPUImageSepiaFilter alloc] init];
//Playing Video
[self playVideo];
}
-(void)playVideo{
if(!movieFile){
movieFile = [[GPUImageMovie alloc] initWithURL:self.videoURL];
movieFile.playAtActualSpeed=YES;
movieFile.playSound=YES;
movieFile.delegate=self;
}
[movieFile addTarget:filter];
CGRect rect=self.viewMovie.frame;
rect.origin=CGPointZero;
self.filterView=[[GPUImageView alloc] initWithFrame:rect];
[self.viewMovie addSubview:self.filterView];
//Rotate the preview to fix portrait recored video to show properly
if([self.transformation isEqualToString:@"portrait"]){
self.filterView.rotation=kGPUImageRotateRight;
}
[self.filterView initMovie];
[filter addTarget:self.filterView];
double delayInSeconds = 0.5;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[movieFile startProcessing];
});
}
- (IBAction)sliderAction:(id)sender {
[self applySliderValue:self.slider.value];
}
//Doesn't work
-(void)applySliderValue:(float)sliderValue{
[((GPUImageSepiaFilter *)filter) setIntensity:sliderValue];
}
感谢任何帮助。
感谢。
答案 0 :(得分:1)
我建议先调试滑块的笔尖连接:
-(void)applySliderValue:(float)sliderValue{
NSLog(@"sliderValue: %f",sliderValue);
[((GPUImageSepiaFilter *)filter) setIntensity:sliderValue];
}
如果所有连接都正确,您应该看到调试器在移动滑块时弹出一个介于0.0和1.0之间的快速序列值。
如果没有任何反应,则会出现nib配置问题。如果值的范围超出0.0-1.0,则会出现UISlider配置问题。
如果它工作正常并且过滤器仍然没有响应通过在GPUImageSepiaFilter的自定义子类中重写此方法来深入挖掘:
- (void)setIntensity:(CGFloat)newIntensity;
{
_intensity = newIntensity;
NSLog(@"intensity: %f",_intensity);
[self setFloat:_intensity forUniform:intensityUniform program:filterProgram];
}