Discussion de l'article "Étudier la classe CCanvas. Comment dessiner des objets transparents" - page 6
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
C'est trop facile, Peter.
Voici une tâche qui vous permettra de maîtriser et de consolider l'essence de la question :
- comment mélanger deux couleurs ARGB(a1,r1,g1,b1) et ARGB(a2,r2,g2,b2) au sein d'un même calque, chacune ayant sa propre transparence a1 et a2 ?
Sans ce mélange, il est impossible de superposer correctement des objets anticrénelés.
D'un coup d'œil rapide : sur la couleur du calque initial, nous superposons la première couleur ARGB(a1,r1,g1,b1) en utilisant la méthode décrite dans l'article. Ensuite, par-dessus la première couleur, nous appliquons la seconde, en effectuant des calculs ARGB selon la même formule. Cette fois-ci, la couleur du bas sera la première, que nous appliquons sur la couleur du calque d'origine.
Je peux me tromper, Nikolaï, mais pourquoi cela ne fonctionnerait-il pas ?
ZY. Je n'ai pas encore expérimenté, mais la première option peut ne pas fonctionner parce que la transparence finale des deux couches supérieures est calculée de manière incorrecte. Dans ce cas, vous devez mélanger la couche intermédiaire avec la couche supérieure et, après avoir obtenu leur couleur commune, la superposer à la couche d'origine.
En un coup d'œil : sur la couleur du calque initial, nous superposons la première couleur ARGB (a1,r1,g1,b1) en utilisant la méthode décrite dans l'article. Ensuite, par-dessus la première couleur, nous appliquons la seconde, en effectuant des calculs ARGB selon la même formule. Cette fois-ci, la couleur du bas sera la première, que nous appliquons sur la couleur de la couche initiale.
Je me trompe peut-être, Nikolaï, mais pourquoi cela ne fonctionnerait-il pas ?
ZY. Je n'ai pas encore expérimenté, mais la première option peut ne pas fonctionner parce que la transparence finale des deux couches supérieures est calculée de manière incorrecte. Dans ce cas, vous devez mélanger la couche intermédiaire avec la couche supérieure et, après avoir obtenu leur couleur commune, la superposer à la couche d'origine.
Il s'agit en fait d'un défi, qui n'est pas facile à relever.
Comment ? L'avez-vous expérimenté vous-même ? Probablement la couleur supérieure comme filtre à utiliser, calculez chaque composante (rgb) de la couche inférieure proportionnellement au niveau de la composante correspondante de la couche supérieure et à la transparence (on détermine la quantité de ce qui passera de la couche inférieure à la couche supérieure), puis recalculez les niveaux des composantes de la couche supérieure en fonction de l'opacité (on détermine la quantité de ce qui reste de la couche supérieure). À la fin, calculer la moyenne de chaque composante des couches inférieure et supérieure (pas les couches inférieure et supérieure d'origine, mais celles qui ont été recalculées, comme écrit). Je n'ai pas essayé.
Ou alors, il suffit d'additionner les composantes proportionnellement à la transparence.
Il faudra que j'expérimente... tâche intéressante.
Comment ? L'avez-vous expérimenté vous-même ?
Uffff... Tout s'est avéré beaucoup plus simple, il n'est pas nécessaire de filtrer avant d'empiler. Les composants sont simplement ajoutés proportionnellement à la transparence et à l'opacité :
Alpha : 255 - la couche supérieure est opaque, 0 - totalement transparente.
lr, lg, lb - composants de la couche inférieure.
ur, ug, ub - composants de la couche supérieure.
Ici dans le terminal, fond noir, carré rouge opaque, dessus bleu avec 50% de transparence puis jaune avec 50% de transparence.
Voici la même chose dans photoshop :
Uffff... Tout s'est avéré beaucoup plus simple, il n'est pas nécessaire de filtrer avant d'empiler. Les composants sont simplement ajoutés proportionnellement à la transparence et à l'opacité :
Alpha : 255 - la couche supérieure est opaque, 0 - totalement transparente.
lr, lg, lb - composants de la couche inférieure.
ur, ug, ub - composants du calque supérieur.
Je vais aller sur mon ordinateur, je vais essayer de mélanger deux images transparentes en utilisant cette formule et voir ce qui se passe. :))
Comment mélanger deux images transparentes ? La première est superposée sur le fond, puis la seconde est superposée sur le résultat.
En général, vous pouvez aussi plier deux images transparentes d'une certaine manière, puis les superposer à l'arrière-plan, mais ce n'est pas le sujet aujourd'hui.
***
Ce qui serait particulièrement intéressant, c'est d'apprendre toutes les méthodes de superposition des calques comme dans Photoshop.
Uffff... Tout s'est avéré beaucoup plus simple, il n'est pas nécessaire de filtrer avant d'empiler. Les composants sont simplement ajoutés proportionnellement à la transparence et à l'opacité :
Alpha : 255 - la couche supérieure est opaque, 0 - totalement transparente.
lr, lg, lb - composants de la couche inférieure.
ur, ug, ub - composants de la couche supérieure.
Ici dans le terminal, fond noir, carré rouge opaque, sur celui-ci bleu avec 50% de transparence puis jaune avec 50% de transparence.
Voici la même chose dans photoshop :
pas que...
le fait est qu'il y a Alpha1 et Alpha2.
Il faut donc calculer non seulement les couleurs de mélange de la nouvelle formation, mais aussi la transparence de la nouvelle formation.
Vous avez essentiellement répété la formule de l'auteur de l'article mélangeant la couleur transparente avec l'arrière-plan :
result=backgraund*(1-alpha)+foregroundet vous l'avez fait :
result=backgraund*(1-alpha)+foreground*alphaVotre variante est correcte, mais l'auteur de l'article a fait une erreur dans une formule simple, et il est amusant que Peter le remercie pour cette formule :))))
Après tout, on peut voir à l'œil nu que le débordement d'uchar se produit facilement dans la formule de l'auteur. Il est étrange que personne n'ait vu cette erreur grossière depuis 4 ans.
c'est ici que s'applique l'algorithme de mélange d'autres couleurs transparentes :