我需要将两张图片混合在一张照片和一张占位符中。我们的想法是,我们看到占位符,除非占位符具有特定颜色,在这种情况下,用户会看到照片。像色度键那样的东西。
为此,我写了一个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只考虑图层或特定的背景颜色?
有更聪明的方法可以获得相同的结果吗?
感谢您的帮助!我知道这是一个相当长而复杂的问题,特别是对于我的英语: - )
答案 0 :(得分:0)
我假设您在通用DisplayObjects上使用此BlendMode,而不是直接在BitmapData上使用。在这种情况下,PixelBender只能处理从绘图API传入的数据,因此您必须确保仅使用这些图层。他们这样做的方法是只将占位符对象和图像对象添加到一个持有者Sprite。