2010-10-07 58 views
0

我需要將兩張圖片混合成一張照片和一個佔位符。我們的想法是,除了參與者具有特定顏色的地方之外,我們會看到佔位符,在這種情況下,用戶會看到照片。像色度鍵。限制使用PixelBender製作的自定義BlendMode - 如何合併圖像

爲此,我寫了一個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

我假設您在通用DisplayObject上使用此BlendMode,而不是直接在BitmapData上使用。在這種情況下,PixelBender只能處理從繪圖API傳入的數據,因此您必須確保只使用這些圖層。他們這樣做的方法是隻添加佔位符對象和圖像對象到一個持有人Sprite。

+0

我不確定我是否已經失手。如果我爲每個圖像和佔位符創建一個新的Sprite對象,BlendMode不會考慮這個新的Sprite下的其他變體?即使Sprite是透明的? – wezzy 2010-11-06 15:26:06

相關問題