展平图像层

时间:2012-01-12 23:34:37

标签: layer rgba flatten

我正在开发一个支持图层的基本图像编辑工具,我需要知道如何将图层合并到一个图像中。显然,如果像素没有alpha值,那么无论哪个都在顶部获胜,但我不知道当像素具有alpha值时该怎么做。所以这里有一个问题:给定使用RGBA值表示的两个(或更多)像素,如何在这个上下文(图层)中将它们合并为一个像素?

TIA

1 个答案:

答案 0 :(得分:2)

对于图层中的每个组件,如果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;
}