1

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

TIA

4

1 回答 1

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;
}
于 2012-01-12T23:47:31.670 回答