2012-01-12 21 views
1

私はレイヤをサポートする基本的な画像編集ツールを開発しており、レイヤを単一の画像にマージする方法を知る必要があります。明らかに、ピクセルにアルファ値がない場合は、どちらが上にあるかがわかりますが、ピクセルがアルファ値を持つときに何をすべきかはわかりません。 RGBA値を使用して2つ(またはそれ以上)のピクセルを表現すると、このコンテキスト(レイヤー)で1つのピクセルにマージするにはどうすればよいですか?画像レイヤを平坦化する

TIA

+0

すべて:http://en.wikipedia.org/wiki/Alpha_compositing –

答えて

2

層中の各成分のアルファ値がa(範囲0..1)である場合は、その成分の割合a +の下に何の割合1-aが表示されます。

下のレイヤーから上のレイヤーまで作業してください。

EDIT:あなたが知っておく必要があります

#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

をコード例のように、あなたは、より具体的にできると思いますか? R、G、B、Aのintで構成されるColorという構造体があるとしたら、どのように見えますか? – mtmurdock

+0

@mtmurdock:答えを編集して、私が意味することを示しました。 – MRAB

関連する問題