Сплютирующие слои изображения
Вопрос
Я работаю над базовым инструментом редактирования изображений с поддержкой слоев, и мне нужно знать, как объединить слои в одно изображение. Очевидно, что если у пикселей нет альфа -значения, то в то время как на лучших победах, но я не знаю, что делать, когда у пикселей есть альфа -значения. Итак, вот вопрос: с учетом двух (или более) пикселей, представленных с использованием значений RGBA, как мне объединить их в один пиксель в этом контексте (слои)?
Тиа
Решение
Для каждого компонента в слое, если альфа -значение 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;
}
Не связан с StackOverflow