我想创建一个GPUImageView来实时显示过滤器(而不是继续阅读imageFromCurrentlyProcessedOutput)
是否可以使用GPUImage的GPUImageChromaKeyBlendFilter和静态源图像自动更新GPUImageView?
这是我的代码,将其读入UIImage;
UIImage *inputImage = [UIImage imageNamed:@"1.JPG"];
UIImage *backgroundImage = [UIImage imageNamed:@"2.JPG"];
GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage];
GPUImageChromaKeyBlendFilter *stillImageFilter = [[GPUImageChromaKeyBlendFilter alloc] init];
[stillImageFilter setThresholdSensitivity:0.5];
[stillImageFilter setColorToReplaceRed:0.0 green:1.0 blue:0.0];
[stillImageSource addTarget:stillImageFilter];
[stillImageSource processImage];
UIImage *currentFilteredVideoFrame = [stillImageFilter imageByFilteringImage: backgroundImage ];
到目前为止,我尝试过的所有内容都要求您将'backgroundImage'作为目标添加到过滤器中(就像使用StillCamera一样)。如果将backgroundImage添加为目标,则GPUImage仅使用此新图像作为其基本图像。
有人可以帮忙吗?
谢谢,
答案 0 :(得分:3)
不要将-imageByFilteringImage:
与双输入过滤器一起使用,例如混合。这是一种基于UIImage快速设置小型过滤器链并获取UIImage的便捷方法。无论如何,你不会想要它用于定位GPUImageView的东西。
对于色度键混合,您需要使用-addTarget
按顺序将输入图像(具有要替换的颜色的图像)和背景图像定位到混合,并使用GPUImagePicture实例。然后,将混合目标定位到GPUImageView。
请注意,如果您希望在此之后继续更新过滤器,则需要在设置方法之后保持对GPUImagePictures的强引用,因此您可能需要在控制器类上创建实例变量。
一旦你以这种方式设置,结果将转到你的GPUImageView。每次在两个图像中的一个上调用-processImage
时,GPUImageView中的显示都将更新。因此,您可以在过滤器设置的每次更改后调用它,例如,如果您有更新过滤器值的滑块,则图像将实时更新。