Вопрос

Я работаю над базовым инструментом редактирования изображений с поддержкой слоев, и мне нужно знать, как объединить слои в одно изображение. Очевидно, что если у пикселей нет альфа -значения, то в то время как на лучших победах, но я не знаю, что делать, когда у пикселей есть альфа -значения. Итак, вот вопрос: с учетом двух (или более) пикселей, представленных с использованием значений 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;
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top