Ограничение пользовательского BlendMode, созданного с помощью PixelBender - как объединять изображения - PullRequest
0 голосов
/ 08 октября 2010

Мне нужно смешать два изображения, одну фотографию и заполнитель. Идея заключается в том, что мы видим местозаполнитель, за исключением случаев, когда указатель цвета имеет определенный цвет, в этом случае пользователь видит фотографию. Что-то вроде хроматического ключа.

Для этой цели я написал шейдер Pixel Bender, который действует как BlendMode. Если фон имеет правильный цвет, выведите пиксельное изображение, в противном случае выведите пиксель из заполнителя.

<languageVersion : 1.0;>

kernel Crossfade
<   namespace : "mynamesp";
vendor : "Artbits snc";
version : 1;
description : "description ... "; >
{

input image4 placeHolder;
input image4 myImage;

output pixel4 dst;

const float3 SPECIAL_COLOR = float3(159.0, 160.0, 161.0); 

void evaluatePixel()
{
    float4 imgPixel = sample(myImagee, outCoord());
    float4 placeHolderPixel = sample(placeHolder, outCoord());

    dst = placeHolderPixel;

    if(placeHolderPixel.r == (SPECIAL_COLOR.r / 255.0) && placeHolderPixel.g == (SPECIAL_COLOR.g / 255.0) && placeHolderPixel.b == (SPECIAL_COLOR.b / 255.0)){
        dst = imgPixel;
    }
}
}

Все работает отлично, за исключением того, что у меня было несколько заполнителей, один поверх другого, и мой шейдер не проверяет цвет своего заполнителя, а цвет всего под фотографией.

Есть ли способ заставить BlendMode учитывать только слой или определенный цвет фона?

Есть ли более разумный способ получить тот же результат?

Спасибо за вашу помощь! я знаю, что это довольно длинный и сложный вопрос, особенно для моего английского: -)

1 Ответ

0 голосов
/ 05 ноября 2010

Я предполагаю, что вы используете этот BlendMode в общих объектах DisplayObject, а не непосредственно в BitmapData. В этом случае PixelBender может работать только с данными, которые передаются из API рисования, поэтому необходимо убедиться, что используются только эти слои. Они могут сделать это, добавив только объект-заполнитель и объект изображения к одному держателю Sprite.

...