Question

Je travaille sur un outil de retouche d'image de base avec prise en charge des couches, et je dois savoir comment fusionner les couches en une seule image. De toute évidence, si les pixels ont aucune valeur alpha, alors si cette date est le gagne haut, mais je ne sais pas quoi faire quand les pixels ont des valeurs alpha. Alors, voici la question: Étant donné deux (ou plus) pixels représentés en utilisant des valeurs RGBA, comment puis-je les fusionner en un seul pixel dans ce contexte (couches)

TIA

Était-ce utile?

La solution

Pour chaque composant dans une couche, si la valeur alpha est a (gamme 0..1), vous verrez une a proportion de ce composant + une 1-a proportion de ce qui est en dessous.

Essayer de travail à partir de la couche inférieure à la couche supérieure.

EDIT:

#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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top