我在我的应用中使用 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
方法时做错了,我正在搜索相关内容,但一无所获
您的 -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/
欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) | Powered by Discuz! X3.4 |