使用BradLarson / GPUImage的图像过滤效果**问题

4
我想给一个UIImage添加不同的效果。目前我正在尝试使用GUIImage库。https://github.com/BradLarson/GPUImage 但是,我无法运行大多数提供的示例。对我来说唯一有效的示例是FilterShowcase,它的效果很棒。
但问题是,它只适用于相机。我想要的是将静态图像加载到UIImageView上并应用这些滤镜。我尝试了,但无法做到。
这是我的尝试方法:
  - (void)setupFilter;
{
//    videoCamera = [[GPUImageVideoCamera alloc]  initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionBack];
////    videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPreset640x480 cameraPosition:AVCaptureDevicePositionFront];
//    videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;


UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 320, 350)];

imgView.Image=[UIImage imageNamed:@"WID-small.jpg"];

[self.view addSubview:imgView];

BOOL needsSecondImage = NO;

switch (filterType)
{
    case GPUIMAGE_SEPIA:
    {
        self.title = @"Sepia Tone";
        self.filterSettingsSlider.hidden = NO;

        [self.filterSettingsSlider setValue:1.0];
        [self.filterSettingsSlider setMinimumValue:0.0];
        [self.filterSettingsSlider setMaximumValue:1.0];

        filter = [[GPUImageSepiaFilter alloc] init];

        sourcePicture = [[GPUImagePicture alloc] initWithImage:imgView.image smoothlyScaleOutput:YES];
        [sourcePicture processImage];            
        [sourcePicture addTarget:filter];




    }; break;

实际上我想做的是,加载静止图像而不是videoCamera。但它不起作用。 如果有人能帮我,非常感激。

尝试使用Core Image Filter对静态图像进行简单且易于操作的选项。 - Leena
你是怎么让滑块与滤镜配合起来的?我的滑块可以改变棕褐色滤镜的值,但在 GPUImageView 上没有任何变化... - jjxtra
1个回答

12
首先,其他示例应用程序无法构建的原因有几个。正如这个答案中所述,请确保您在Xcode窗口左上角选择了应用程序的方案,而不是GPUImage框架项目。如果更改后没有帮助,请退出Xcode,从DerivedData目录中删除相关项目目录,然后重新启动Xcode。由于最近Xcode版本中的一个错误,有时需要这样做。
图像过滤在项目文档中有描述,在Readme.md文件和您上面链接的页面上。特别是,请参阅标题为“处理静态图像”的部分:
引用:

有几种方法可以处理静态图像并创建结果。首先,您可以创建一个静态图像源对象并手动创建一个过滤器链:

UIImage *inputImage = [UIImage imageNamed:@"Lambeau.jpg"];

GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:inputImage];
GPUImageSepiaFilter *stillImageFilter = [[GPUImageSepiaFilter alloc] init];

[stillImageSource addTarget:stillImageFilter];
[stillImageSource processImage];

UIImage *currentFilteredVideoFrame = [stillImageFilter imageFromCurrentlyProcessedOutput];

如果您想对一张图片应用单个过滤器,只需执行以下操作:

GPUImageSepiaFilter *stillImageFilter2 = [[GPUImageSepiaFilter alloc] init];
UIImage *quickFilteredImage = [stillImageFilter2 imageByFilteringImage:inputImage];

SimpleImageFilter示例应用程序展示了如何更详细地实现这一点。


非常感谢您详细的回复。我很高兴能够从像您这样的专业人士那里得到答案。现在它已经正常工作了。我应用了过滤器,然后在imageView上显示图像。但是我现在唯一的问题是值更改无法生效(滑块值更改不适用于图像)。 - smartsanja
Brad,我该如何混合两个滤镜并应用于同一张图片?我找不到方法 =( 目前我是使用一个滤镜,得到结果,然后再应用第二个滤镜以获得最终结果。感谢这个很棒的框架! - Natan R.
@NatanR. - 我不确定你在问什么。你可以简单地设置一个过滤器链(将一个过滤器添加为下一个过滤器的目标),以便一个过滤器被应用,然后是另一个过滤器。要混合两个图像,您可以使用混合过滤器。 - Brad Larson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接