私はレイヤをサポートする基本的な画像編集ツールを開発しており、レイヤを単一の画像にマージする方法を知る必要があります。明らかに、ピクセルにアルファ値がない場合は、どちらが上にあるかがわかりますが、ピクセルがアルファ値を持つときに何をすべきかはわかりません。 RGBA値を使用して2つ(またはそれ以上)のピクセルを表現すると、このコンテキスト(レイヤー)で1つのピクセルにマージするにはどうすればよいですか?画像レイヤを平坦化する
TIA
私はレイヤをサポートする基本的な画像編集ツールを開発しており、レイヤを単一の画像にマージする方法を知る必要があります。明らかに、ピクセルにアルファ値がない場合は、どちらが上にあるかがわかりますが、ピクセルがアルファ値を持つときに何をすべきかはわかりません。 RGBA値を使用して2つ(またはそれ以上)のピクセルを表現すると、このコンテキスト(レイヤー)で1つのピクセルにマージするにはどうすればよいですか?画像レイヤを平坦化する
TIA
層中の各成分のアルファ値が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;
}
すべて:http://en.wikipedia.org/wiki/Alpha_compositing –