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