0

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

为此,我编写了一个充当 BlendMode 的 Pixel Bender 着色器。如果背景颜色正确,则输出像素图像,否则从占位符输出像素。

<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 只考虑一个图层或一个特定的背景颜色?

有没有更聪明的方法来获得相同的结果?

谢谢你的帮助!我知道这是一个相当长而复杂的问题,尤其是对我的英语来说:-)

4

1 回答 1

0

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

于 2010-11-05T13:19:42.603 回答