如何使具有一定RGB范围的像素点透明
How to make pixels with a certain RGB range transparent
我在 java 字节数组中有一个固定大小 frame buffer
(从 YUV 有效转换而来的 1200x720 RGBA)。
我想将某种颜色的阴影(在我的例子中是白色,不管它的 alpha 值如何)设置为完全透明。
目前,我正在通过 CPU 遍历字节数组并将像素置零(如果 RGB > 0xC8
)来执行此操作。这有点管用,但在直播中这样做显然非常慢(>1 秒/帧)。
我一直在研究通过 Android 上的 GPU/OpenGL
执行此操作的方法,我看到提到了 Alpha 测试、混合和颜色键控。似乎 alpha 测试在这里没有用,因为它依赖于 alpha 信息而不是 RGB 的值。
知道如何使用 OpenGL/java 在 Android 上执行此操作吗?
您应该创建一个自定义渲染脚本来转换这些像素,您也可以使用它从 yuv 转换,这样您只处理缓冲区中的像素一次
It seems the alpha test is not useful here
alpha 测试的逻辑在片段着色器中实现,因此与其测试 alpha,不如更改测试以实现对 RGB 值的检查。这里的技术是通用的并且 100% 灵活。您正在寻找的基础操作是片段着色器,它在颜色键匹配时触发 discard
操作。
或者,您可以使用相同的条件检查,而不是调用 discard
,只需将输出颜色设置为 vec4(0.0)
,并使用混合来避免修改该片段的帧缓冲区。总的来说,我希望这会更有效率; discard
往往会产生奇怪的性能副作用。
我在 java 字节数组中有一个固定大小 frame buffer
(从 YUV 有效转换而来的 1200x720 RGBA)。
我想将某种颜色的阴影(在我的例子中是白色,不管它的 alpha 值如何)设置为完全透明。
目前,我正在通过 CPU 遍历字节数组并将像素置零(如果 RGB > 0xC8
)来执行此操作。这有点管用,但在直播中这样做显然非常慢(>1 秒/帧)。
我一直在研究通过 Android 上的 GPU/OpenGL
执行此操作的方法,我看到提到了 Alpha 测试、混合和颜色键控。似乎 alpha 测试在这里没有用,因为它依赖于 alpha 信息而不是 RGB 的值。
知道如何使用 OpenGL/java 在 Android 上执行此操作吗?
您应该创建一个自定义渲染脚本来转换这些像素,您也可以使用它从 yuv 转换,这样您只处理缓冲区中的像素一次
It seems the alpha test is not useful here
alpha 测试的逻辑在片段着色器中实现,因此与其测试 alpha,不如更改测试以实现对 RGB 值的检查。这里的技术是通用的并且 100% 灵活。您正在寻找的基础操作是片段着色器,它在颜色键匹配时触发 discard
操作。
或者,您可以使用相同的条件检查,而不是调用 discard
,只需将输出颜色设置为 vec4(0.0)
,并使用混合来避免修改该片段的帧缓冲区。总的来说,我希望这会更有效率; discard
往往会产生奇怪的性能副作用。