Отключение цветовых диапазонов в Pixel Bender

Как лучше всего отключить (с помощью PixelBender) цвета, попадающие в определенный диапазон. Например, отключите все цвета от 0x0000FF до 0x00FFFF. Спасибо за вашу помощь. Это должно работать во Flash. Спасибо!


person Andrei Taraschuk    schedule 23.02.2011    source источник


Ответы (2)


Если вы имеете в виду канал «между», вот простой способ сделать это.

<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;
    }
}
person Sean Fujiwara    schedule 24.02.2011
comment
Спасибо @sean, это не совсем так, потому что мне пришлось вырезать диапазон на основе числового значения цвета. - person Andrei Taraschuk; 25.02.2011

Не уверен, что это лучший способ, но он сработал. Идея состоит в том, чтобы смоделировать значение цвета uint в 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;
    }
}
person Andrei Taraschuk    schedule 25.02.2011