限制使用PixelBender制作的自定义BlendMode - 如何合并图像

时间:2010-10-07 23:54:21

标签: actionscript-3 blend pixel-bender

我需要将两张图片混合在一张照片和一张占位符中。我们的想法是,我们看到占位符,除非占位符具有特定颜色,在这种情况下,用户会看到照片。像色度键那样的东西。

为此,我写了一个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 :(得分:0)

我假设您在通用DisplayObjects上使用此BlendMode,而不是直接在BitmapData上使用。在这种情况下,PixelBender只能处理从绘图API传入的数据,因此您必须确保仅使用这些图层。他们这样做的方法是只将占位符对象和图像对象添加到一个持有者Sprite。