• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ios - GPUImage GroupFilter,亮度和对比度 iOS

[复制链接]
菜鸟教程小白 发表于 2022-12-13 05:00:59 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我在我的应用中使用 GPUImage,但我一直在尝试更改图像的亮度和对比度。

我用源图片创建了一个GPUImageView,并设置了将使用UISlider修改的亮度滤镜和对比度滤镜

这是我的代码:

首先

.h

__weak IBOutlet GPUImageView* imageView;

.m

GPUImagePicture* sourcePicture;
GPUImageBrightnessFilter *brightnessFilter;
GPUImageContrastFilter *contrastFilter;

当我的 View Controller 被加载时,我会做下一件事:

UIImage* image = "[image fromAnotherViewController]";
sourcePicture = [[GPUImagePicture alloc] initWithImage:image smoothlyScaleOutput:YES];

brightnessFilter = [[GPUImageBrightnessFilter alloc] init];
contrastFilter = [[GPUImageContrastFilter alloc] init];

[brightnessFilter forceProcessingAtSize:imageView.sizeInPixels];
[contrastFilter forceProcessingAtSize:imageView.sizeInPixels];

[sourcePicture addTarget:brightnessFilter];
[brightnessFilter addTarget:contrastFilter];

[contrastFilter addTarget:imageViewBewo];

[sourcePicture processImage];

这是对比度和亮度值更改方法

- (IBAction)brightnessValueChangedid)sender
{
    [brightnessFilter setBrightness:brightnessSlider.value];
    [sourcePicture processImage];
}

- (IBAction)contrastValueChangedid)sender
{
    [contrastFilter setContrast:contrastSlider.value];
    [sourcePicture processImage];
}

到这里为止一切正常,所以我有一个按钮可以对图像应用过滤器

- (IBAction) applyFilterActionid)sender
{
    [sourcePicture removeAllTargets];

    GPUImageLordKelvinFilter* filterEffect = [[GPUImageLordKelvinFilter alloc] init];

    [filterEffect forceProcessingAtSize:imageView.sizeInPixels];
    [brightnessFilter forceProcessingAtSize:imageView.sizeInPixels];
    [contrastFilter forceProcessingAtSize:imageView.sizeInPixels];

    [sourcePicture addTarget:brightnessFilter];
    [brightnessFilter addTarget:contrastFilter];
    [brightnessFilter addTarget:filterEffect];

    [filterEffect addTarget:imageView];

    [brightnessFilter setBrightness:brightnessSlider.value];
    [contrastFilter setContrast:contrastSlider.value];

    [sourcePicture processImage];
}

过滤器应用正确,但是当我移动 slider 时,imageView 回到原始图像,正确修改了对比度和亮度,但没有过滤器效果。

但是,如果我在应用滤镜效果的同时修改亮度或对比度,则亮度或对比度会正确应用在滤镜效果中,例如:

// in applyFilterAction: methods
.
. 
.
[filterEffect addTarget:imageView];

[brightnessFilter setBrightness:-0.5];
[contrastFilter setContrast:2.5];

[sourcePicture processImage];
.
.
.

谁能给我任何帮助来应用过滤器和修改它们的值,我认为我在使用 addTarget 方法时做错了,我正在搜索相关内容,但一无所获



Best Answer-推荐答案


您的 -applyFilterAction: 方法正在破坏您的过滤器链以引入您的新过滤器。如果这就是你想要的,那很好,但这样做会有点奇怪。

在你原来的链中你去

sourcePicture -> brightnessFilter -> contrastFilter > imageView

在新链中,这是现在

sourcePicture -> brightnessFilter -> filterEffect -> imageView
                                  -> contrastFilter > imageView

您已通过使其同时针对 filterEffect 和 contrastFilter 过滤器来在亮度过滤器处引入分支。 contrastFilter 从未从定位 imageView 中删除,因此它一直定位它。

将两个目标发送到需要单个输入的东西(如 GPUImageView)可能会导致未定义的行为。关于该链接的某些内容是错误的。您的意思是在您的 contrastFilter 之后链接 filterEffect,或者您的 filterEffect 和 contrastFilter 需要针对两个单独的 GPUImageView。在前一种情况下,您需要先将目标从 contrastFilter 删除到 imageView,然后再设置链的其余部分。

在重置过滤器链之前,最好在链中的每个过滤器上调用 -removeAllTargets,以确保没有任何像这样的悬空连接。 p>

关于ios - GPUImage GroupFilter,亮度和对比度 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28153182/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap