关闭 Pixel Bender 中的颜色范围

发布于 2024-10-18 20:17:34 字数 104 浏览 6 评论 0原文

关闭(使用 PixelBender)处于特定范围内的颜色的最佳方法是什么?例如,关闭 0x0000FF 到 0x00FFFF 之间的所有颜色。感谢您的帮助。这必须在 Flash 中起作用。谢谢!

What is the best way to turn turn off (using PixelBender) colors that fall within a certain range. For example, turn off all colors between 0x0000FF and 0x00FFFF. Thanks for your help. This has to work in Flash. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浮生面具三千个 2024-10-25 20:17:34

如果您的意思是每个通道“之间”,这里有一个简单的方法。

<languageVersion : 1.0;>

kernel untitled
<   namespace : "Your Namespace";
    vendor : "Your Vendor";
    version : 1;
>
{
    input image4 src;
    output pixel4 dst;

    parameter float rThreshold
    <
        minValue: 0.0;
        maxValue: 1.0;
        defaultValue: 0.0;
    >;

    parameter float gThreshold
    <
        minValue: 0.0;
        maxValue: 1.0;
        defaultValue: 0.0;
    >;

    parameter float bThreshold
    <
        minValue: 0.0;
        maxValue: 1.0;
        defaultValue: 0.0;
    >;

    void
    evaluatePixel()
    {
        pixel4 sourcePixel = sampleNearest(src,outCoord());
        if(sourcePixel.r <= rThreshold) sourcePixel.r = 0.0;
        if(sourcePixel.g <= gThreshold) sourcePixel.g = 0.0;
        if(sourcePixel.b <= bThreshold) sourcePixel.b = 0.0;
        dst = sourcePixel;
    }
}

If you mean per channel "between", here is a simple way to do it.

<languageVersion : 1.0;>

kernel untitled
<   namespace : "Your Namespace";
    vendor : "Your Vendor";
    version : 1;
>
{
    input image4 src;
    output pixel4 dst;

    parameter float rThreshold
    <
        minValue: 0.0;
        maxValue: 1.0;
        defaultValue: 0.0;
    >;

    parameter float gThreshold
    <
        minValue: 0.0;
        maxValue: 1.0;
        defaultValue: 0.0;
    >;

    parameter float bThreshold
    <
        minValue: 0.0;
        maxValue: 1.0;
        defaultValue: 0.0;
    >;

    void
    evaluatePixel()
    {
        pixel4 sourcePixel = sampleNearest(src,outCoord());
        if(sourcePixel.r <= rThreshold) sourcePixel.r = 0.0;
        if(sourcePixel.g <= gThreshold) sourcePixel.g = 0.0;
        if(sourcePixel.b <= bThreshold) sourcePixel.b = 0.0;
        dst = sourcePixel;
    }
}
千柳 2024-10-25 20:17:34

不确定这是否是最好的方法,但它有效。这个想法是在 Pixel Bender 中模拟 uint 颜色值。

evaluatePixel()
{
    float4 color = sampleNearest(src,outCoord());

    float minInt = 0.0;
    if(minColor.r > 0.0) minInt += minColor.r + 3.0;
    if(minColor.g > 0.0) minInt += minColor.g + 2.0;
    if(minColor.g > 0.0) minInt += minColor.b + 1.0;

    float maxInt = 0.0;
    if(maxColor.r > 0.0) maxInt += maxColor.r + 3.0;
    if(maxColor.g > 0.0) maxInt += maxColor.g + 2.0;
    if(maxColor.g > 0.0) maxInt += maxColor.b + 1.0;

    float colInt = 0.0;
    if(color.r > 0.0) colInt += color.r + 3.0;
    if(color.g > 0.0) colInt += color.g + 2.0;
    if(color.g > 0.0) colInt += color.b + 1.0;

    if(colInt >= minInt && colInt <= maxInt)
    {
        dst = float4(0.0);
    }else{
        dst = color;
    }
}

Not sure whether this is the best way but it worked. The idea is to simulate uint color value in Pixel Bender.

evaluatePixel()
{
    float4 color = sampleNearest(src,outCoord());

    float minInt = 0.0;
    if(minColor.r > 0.0) minInt += minColor.r + 3.0;
    if(minColor.g > 0.0) minInt += minColor.g + 2.0;
    if(minColor.g > 0.0) minInt += minColor.b + 1.0;

    float maxInt = 0.0;
    if(maxColor.r > 0.0) maxInt += maxColor.r + 3.0;
    if(maxColor.g > 0.0) maxInt += maxColor.g + 2.0;
    if(maxColor.g > 0.0) maxInt += maxColor.b + 1.0;

    float colInt = 0.0;
    if(color.r > 0.0) colInt += color.r + 3.0;
    if(color.g > 0.0) colInt += color.g + 2.0;
    if(color.g > 0.0) colInt += color.b + 1.0;

    if(colInt >= minInt && colInt <= maxInt)
    {
        dst = float4(0.0);
    }else{
        dst = color;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文