レイヤーをサポートする基本的な画像編集ツールに取り組んでおり、レイヤーを単一の画像にマージする方法を知る必要があります。明らかに、ピクセルにアルファ値がない場合は、上にある方が勝ちますが、ピクセルにアルファ値がある場合にどうすればよいかわかりません。そこで質問があります: RGBA 値を使用して表現された 2 つ (またはそれ以上) のピクセルが与えられた場合、このコンテキスト (レイヤー) でそれらを単一のピクセルにマージするにはどうすればよいですか?
ティア
レイヤー内の各コンポーネントについて、アルファ値が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;
}