2010-10-07 3 views
0

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

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

<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 рассматривать только слой или определенный цвет фона?

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

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

ответ

0

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

+0

Я не уверен, что понимаю. Если я создаю новый объект Sprite для каждой пары изображений и заполнителя, BlendMode не учитывает другие тонкости этого нового спрайта? даже если Спрайт является прозрачным? – wezzy