如何使用Silverlight 3像素着色器实现平滑的Alpha通道抠图?

3

如何使用Silverlight 3像素着色器进行平滑的Alpha通道键控?

我想要一些HLSL过滤器(例如这个Shazzam HLSL示例)

             sampler2D  implicitInputSampler : register(S0);


             float4 main(float2 uv : TEXCOORD) : COLOR
             {
               float4 color = tex2D( implicitInputSampler, uv );

             if( color.r + color.g + color.b < 1.9 ) {
             color.rgba = 0;
                 }

             return color;
             } 

我希望您不仅仅能够键入我正在尝试键入的颜色,而且还要键入例如如果深红色由红色和蓝色组成,而我正在键入所有蓝色,则希望获得透明的红色。 (可能这张图片可以解释我想要什么) From to Image
(来源:narod.ru

目前来看,您想将其中一个颜色通道映射到 alpha 通道。那么只需执行 color.a = color.bcolor.a = 1 - color.b 如何?如果您想要丢弃蓝色分量,则必须能够将其设置为 0,然后显式地执行 color.b = 0。我想这应该会有所帮助... - IgorK
1个回答

1

听起来你只是想减去一个颜色而不是关键它。

float4 subtract = ... ; // color you want to remove
float4 color = ... ;

color.r -= subtract.r;
... // for b and g

if ( color.r < 0 )
    color.r = 0;
... // for b and g

在此之后,您可以使用颜色选择器选择要“减去”的颜色并将其删除。希望这就是您想要做的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接