【问题标题】:How to add multiple filters to UIImage GPUImage?如何向 UIImage GPUImage 添加多个过滤器?
【发布时间】:2015-02-04 23:30:41
【问题描述】:

我注意到很多人在询问有关将滤镜与 GPUImage 关联的问题。我不太清楚如何简洁地做到这一点。今晚终于搞定了。只是想分享我的代码,以便人们可以链接到解决方案。

【问题讨论】:

    标签: ios objective-c filter gpuimage brightness


    【解决方案1】:
    UIImage *faceImage = [UIImage imageNamed:@"469453586_640.jpg"];
    UIImageView *face = [[UIImageView alloc] initWithFrame:CGRectMake(0.0, 0.0, faceImage.size.width/2.0, faceImage.size.height/2.0)];
    [face setImage:faceImage];
    [self.view addSubview:face];
    
    GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:faceImage];
    
    GPUImageBrightnessFilter *brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
    [brightnessFilter setBrightness:.15];
    GPUImageGrayscaleFilter *grayscaleFilter = [[GPUImageGrayscaleFilter alloc] init];
    
    GPUImagePosterizeFilter *posterizeFilter = [[GPUImagePosterizeFilter alloc] init];
    [posterizeFilter setColorLevels:1];
    
    
    [stillImageSource addTarget:brightnessFilter];
    [brightnessFilter addTarget:grayscaleFilter];
    [grayscaleFilter addTarget:posterizeFilter];
    
    // these need to be changed if you change the order of your filters
    //    [brightnessFilter useNextFrameForImageCapture];
    //    [grayscaleFilter useNextFrameForImageCapture];
    [posterizeFilter useNextFrameForImageCapture];
    
    [stillImageSource processImage];
    
    [face setImage: [posterizeFilter imageFromCurrentFramebuffer]];
    

    【讨论】:

    • 我不建议将其定向到 UIImageView。相反,使用 GPUImageView 并以它为目标。与 UIImage 之间的转换既昂贵又耗费内存,而直接转到 GPUImageView 可以避免这种情况。
    • 我使用了 GPUImageView,它渲染了图像中心和黑色背景。现在你发明了我相信你的东西,但作为产品开发人员 UIImageView 是首选,这是我所知道的,它得到了我想要的结果,我希望将图像设置到我定义的框架中。所以,如果你想让人们这样做,那就让它变得简单。让它发挥作用非常困难,人们总是会以最快的方式获得他们想要的结果。
    • 另外,我建议去每个帖子,人们询问如何准确地完成我刚刚完成的工作并纠正它们,而不是敲定解决方案。
    • 我经常向人们推荐的东西(一个例子:stackoverflow.com/a/25046492/19679),它可以在性能和内存配置方面产生巨大的差异。您看到的黑条是由于 GPUImageView 上的默认 kGPUImageFillModePreserveAspectRatio fillMode 造成的。您可以将其设置为 kGPUImageFillModeStretch 或 kGPUImageFillModePreserveAspectRatioAndFill 以填充空间,但您可能希望首先调整视图大小以适合输出图像的框架。无意冒犯,只是大多数人没有意识到 UIImageView 有多慢。
    • 我有点被冒犯了,但我只是个婴儿。谢谢你的提示!我将重写我的示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2014-04-14
    • 2022-01-17
    相关资源
    最近更新 更多