菜鸟教程小白 发表于 2022-12-13 05:00:59

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


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

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

<p>这是我的代码:</p>

<p>首先</p>

<p>.h</p>

<pre><code>__weak IBOutlet GPUImageView* imageView;
</code></pre>

<p>.m</p>

<pre><code>GPUImagePicture* sourcePicture;
GPUImageBrightnessFilter *brightnessFilter;
GPUImageContrastFilter *contrastFilter;
</code></pre>

<p>当我的 ViewController 被加载时,我会做下一件事:</p>

<pre><code>UIImage* image = &#34;&#34;;
sourcePicture = [ initWithImage:image smoothlyScaleOutput:YES];

brightnessFilter = [ init];
contrastFilter = [ init];

;
;

;
;

;

;
</code></pre>

<p>这是对比度和亮度值更改方法</p>

<pre><code>- (IBAction)brightnessValueChanged:(id)sender
{
    ;
    ;
}

- (IBAction)contrastValueChanged:(id)sender
{
    ;
    ;
}
</code></pre>

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

<pre><code>- (IBAction) applyFilterAction:(id)sender
{
    ;

    GPUImageLordKelvinFilter* filterEffect = [ init];

    ;
    ;
    ;

    ;
    ;
    ;

    ;

    ;
    ;

    ;
}
</code></pre>

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

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

<pre><code>// in applyFilterAction: methods
.
.
.
;

;
;

;
.
.
.
</code></pre>

<p>谁能给我任何帮助来应用过滤器和修改它们的值,我认为我在使用 <code>addTarget</code> 方法时做错了,我正在搜索相关内容,但一无所获</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的 <code>-applyFilterAction:</code> 方法正在破坏您的过滤器链以引入您的新过滤器。如果这就是你想要的,那很好,但这样做会有点奇怪。</p>

<p>在你原来的链中你去</p>

<pre><code>sourcePicture -&gt; brightnessFilter -&gt; contrastFilter &gt; imageView
</code></pre>

<p>在新链中,这是现在</p>

<pre><code>sourcePicture -&gt; brightnessFilter -&gt; filterEffect -&gt; imageView
                                  -&gt; contrastFilter &gt; imageView
</code></pre>

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

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

<p>在重置过滤器链之前,最好在链中的每个过滤器上调用 <code>-removeAllTargets</code>,以确保没有任何像这样的悬空连接。</code> p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - GPUImage GroupFilter,亮度和对比度 iOS,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/28153182/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/28153182/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - GPUImage GroupFilter,亮度和对比度 iOS