我正在研究支持圖層的基本圖像編輯工具,並且我需要知道如何將圖層合併到單個圖像中。顯然,如果像素沒有alpha值,那麼取決於哪一個取勝,但當像素具有alpha值時,我不知道該做什麼。因此,這裏有一個問題:給定使用RGBA值表示的兩個(或更多)像素,如何將它們合併到此上下文中的單個像素(圖層)中?展平圖像層
TIA
我正在研究支持圖層的基本圖像編輯工具,並且我需要知道如何將圖層合併到單個圖像中。顯然,如果像素沒有alpha值,那麼取決於哪一個取勝,但當像素具有alpha值時,我不知道該做什麼。因此,這裏有一個問題:給定使用RGBA值表示的兩個(或更多)像素,如何將它們合併到此上下文中的單個像素(圖層)中?展平圖像層
TIA
對於一個層的每個組件,如果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;
}
一切:http://en.wikipedia.org/wiki/Alpha_compositing – 2012-01-12 23:46:42