簡體   English   中英

GPUImageSoftLightBlendFilter - 顯示iOS圖像中透明區域的黑色區域

[英]GPUImageSoftLightBlendFilter - show black area at transparent area in an image iOS

我使用GPUImage框架開發了一個iPhone應用程序,其中包括廣泛使用過濾器,混合圖像等。

GPUImageSoftLightBlendFilter外,一切正常,因為它在圖像的透明區域顯示黑色區域。 如果任何人在實施同樣的問題時遇到類似問題,請回復。

有關更多信息,請參閱附件截圖。

在此輸入圖像描述

我相信這是由於片段着色器中的除零錯誤。 此混合操作的當前片段着色器代碼如下所示:

mediump vec4 base = texture2D(inputImageTexture, textureCoordinate);
mediump vec4 overlay = texture2D(inputImageTexture2, textureCoordinate2);

gl_FragColor = base * (overlay.a * (base / base.a) + (2.0 * overlay * (1.0 - (base / base.a)))) + overlay * (1.0 - base.a) + base * (1.0 - overlay.a);

如您所見,如果基本圖像(輸入0)的Alpha通道為零,您將在上面收到錯誤。 這導致這些像素的黑色輸出。

一個可能的解決方案是用以下內容替換上面的着色器代碼:

 mediump vec4 base = texture2D(inputImageTexture, textureCoordinate);
 mediump vec4 overlay = texture2D(inputImageTexture2, textureCoordinate2);

 lowp float alphaDivisor = base.a + step(base.a, 0.0); // Protect against a divide-by-zero blacking out things in the output
 gl_FragColor = base * (overlay.a * (base / alphaDivisor) + (2.0 * overlay * (1.0 - (base / alphaDivisor)))) + overlay * (1.0 - base.a) + base * (1.0 - overlay.a);

嘗試使用第二部分替換第一部分中的GPUImageSoftLightBlendFilter着色器代碼,並查看是否刪除了黑色區域。 如果這解決了這個問題,我會將其推入主框架。

我相信這源於上面的過濾器試圖糾正輸入圖像中的預乘alpha,我將考慮去除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM