我正在开发一个支持图层的基本图像编辑工具,我需要知道如何将图层合并为单个图像。显然,如果像素没有 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;
}