如何使具有特定RGB范围的像素透明

时间:2018-05-06 03:23:02

标签: java android opengl-es alpha renderscript

我在java字节数组中有一个固定大小frame buffer(从YUV有效转换为1200x720 RGBA)。

我想将一定颜色的阴影(在我的情况下为白色,无论其alpha值如何)设置为完全透明。

目前,我通过遍历字节数组并通过RGB > 0xC8对像素进行归零来通过CPU执行此操作。这在某种程度上有效,但显然非常慢(> 1秒/帧),因为在实时流上这样做。

我一直在研究通过Android上GPU/OpenGL执行此操作的方法,我看到提到Alpha测试,混合和颜色键控。看来alpha测试在这里没用,因为它依赖于alpha信息而不是RGB的值。

知道如何使用OpenGL / java在Android上执行此操作吗?

2 个答案:

答案 0 :(得分:1)

  

似乎alpha测试在这里没用

alpha测试的逻辑在片段着色器中实现,因此不是测试alpha只是更改测试以实现对RGB值的检查。这里的技术是通用的,100%灵活。您正在寻找的基础操作是片段着色器,它在颜色键匹配时触发discard操作。

或者你可以使用相同的条件检查,而不是调用discard只需将输出颜色设置为vec4(0.0)并使用混合来避免修改该片段的帧缓冲。总的来说,我希望这会更有效率; discard往往会产生奇怪的性能副作用。

答案 1 :(得分:0)

您应该创建一个自定义renderscript脚本来转换这些像素,您也可以使用它来转换yuv,这样您只需处理缓冲区中的像素