2012-01-12 80 views
1

我正在研究支持圖層的基本圖像編輯工具,並且我需要知道如何將圖層合併到單個圖像中。顯然,如果像素沒有alpha值,那麼取決於哪一個取勝,但當像素具有alpha值時,我不知道該做什麼。因此,這裏有一個問題:給定使用RGBA值表示的兩個(或更多)像素,如何將它們合併到此上下文中的單個像素(圖層)中?展平圖像層

TIA

+0

一切:http://en.wikipedia.org/wiki/Alpha_compositing – 2012-01-12 23:46:42

回答

2

對於一個層的每個組件,如果alpha值爲a(範圍0..1),那麼你會看到成分的比例a +什麼是下一個比例1-a

嘗試從底層到頂層工作。

編輯:

你需要知道
#define MAX_PIXEL 255 

int numLayers; // Number of layers. 
Color* layers; // Pointer to the layers. 

Color flattened; 

flattened.R = 0; 
flattened.G = 0; 
flattened.B = 0; 
flattened.A = MAX_PIXEL; 

// Layer 0 is the bottom layer. 
for (int i = 0; i < numLayers; i++) { 
    int alpha; 

    alpha = layers[i].A; 

    flattened[i].R = (layers[i].R * alpha + flattened[i].R * (MAX_PIXEL - alpha))/MAX_PIXEL; 
    flattened[i].G = (layers[i].G * alpha + flattened[i].G * (MAX_PIXEL - alpha))/MAX_PIXEL; 
    flattened[i].B = (layers[i].B * alpha + flattened[i].B * (MAX_PIXEL - alpha))/MAX_PIXEL; 
} 
+0

你認爲你能更具體,像一個代碼示例?假設有一個叫做Color的結構體,它由一個R,G,B和A的int組成,這看起來怎麼樣? – mtmurdock 2012-01-13 05:50:31

+0

@mtmurdock:我編輯了答案以顯示我的意思。 – MRAB 2012-01-13 21:03:20