IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

Blog de Gilles Vasseur - Pascal et compagnie

Les transitions entre images sous Lazarus avec BGRABitmap (VII) - Le recouvrement

Noter ce billet
par , 26/03/2018 à 12h25 (968 Affichages)
Après avoir installé la bibliothèque BGRABitmap, qui sert de support au traitement et à l'affichage des images, et bâti un logiciel de test avec la prise en charge de la vitesse d'affichage et de l'opacité, il est temps de proposer des transitions.

Les transitions de recouvrement


Nous appellerons transitions de recouvrement les transitions qui affichent une image d'origine qui doit être peu à peu recouverte par l'image de destination. Ces transitions sont simples d'un point de vue mathématique puisqu'elles ne mettent en œuvre que des translations.

Pour rappel, une translation en mathématique est une transformation qui correspond à l'idée intuitive de glissement. Elle est facile à mettre en œuvre puisqu'elle n'utilise pas de rotations et ne déforme l'objet translaté.

Pour nommer les méthodes chargées de les effectuer nous adopterons une convention simple : le nom de la méthode indiquera toujours le type de transition (ici over pour recouvrement) suivi de la direction du mouvement. Par exemple, pour une transition partant du coin supérieur gauche et allant vers la droite et le bas, nous implémenterons la méthode OverBottomRight.

Le recouvrement OverDown

Le recouvrement OverDown nous servira à comprendre les calculs nécessaires à la série de transitions de recouvrement. L'idée fondamentale qui sous-tend tout recouvrement est celle-ci : nous dessinerons l'image d'origine sur laquelle viendra s'inscrire une partie de l'image de destination.

En fait, nous n'aurons pas à nous préoccuper du calcul de la partie visible de l'image de destination, car c'est le composant TImage d'accueil qui s'occupera lui-même de la définir en fonction de sa surface d'affichage propre. Notre travail se réduira à fournir les coordonnées du coin supérieur de gauche de l'image de destination, suivant le pourcentage réalisé de la transition. Autrement dit, nous fixerons au départ les coordonnées du point supérieur gauche de l'image de transition de telle manière qu'elle soit invisible et ce n'est que progressivement qu'elle entrera par translation dans le cadre de visibilité.

La translation conservant les longueurs et les angles, un seul point est nécessaire pour les calculs. Si nous parvenons à calculer les coordonnées du point supérieur gauche de l’image, par exemple, le rectangle qu'elle forme sera reproduit à l'identique à la nouvelle position.


Voici comment se présentent au départ les deux images avec la méthode OverDown :
Nom : overdown.png
Affichages : 120
Taille : 1,2 Ko

Le rectangle rouge représente l'image d'origine, mais aussi la surface visible en permanence. Le rectangle bleu représente l'image de destination. Au départ, nous la situerons au-dessus de l'image de destination, donc hors de la zone d'affichage, puis nous la ferons glisser par translation vers le bas.

Nous remarquons que seules les ordonnées des points de l'image de destination sont affectées par la translation. En effet, le rectangle bleu n'a à bouger ni vers la gauche ni vers la droite. Par conséquent, le calcul des coordonnées du point supérieur gauche de l'image de destination exclura l'abscisse qui restera constante pour définir l'ordonnée par un calcul rudimentaire.

Dans une image, nous savons que le coin supérieur gauche a pour coordonnées (0, 0). Dans notre méthode OverDown, nous laisserons donc LX à sa valeur de 0. L'image de destination étant située au-dessus de l'image d'origine, l'ordonnée de son point supérieur gauche sera négative : plus exactement, elle vaudra la valeur négative de la hauteur du rectangle qu'elle forme. Cette hauteur nous est fournie par la méthode ClientHeight de l'image d'affichage du résultat.

Pour le déplacement, nous partirons de cette valeur -ClientHeight pour lui ajouter progressivement un pourcentage d'elle-même, soit ClientHeight * fStep div 100. Ainsi, l'ordonnée va se rapprocher de plus en plus de 0 et finalement l'image de destination recouvrira totalement l'image d'origine.

Voici la ligne de code à inclure dans le gestionnaire OnClick du bouton pour obtenir l'effet désiré :

Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
LX:= 0;
[]
LY := - imgResult.ClientHeight + imgResult.ClientHeight * fStep div
      100; // OVERDOWN

Vous reconnaîtrez là l'unique transition utilisée lors de nos essais. Nous transformerons cette ligne en méthode quand nous en aurons besoin. Pour le moment, nous nous contenterons d'insérer et d'effacer les lignes nécessaires au fur et à mesure de nos besoins.

Le recouvrement OverUp

Le recouvrement Ove ressemble à s'y méprendre à celui qui vient d'être vu. Simplement, il faut à présent placer l'image de destination plus bas que celle d'origine pour la faire remonter peu à peu.

La configuration de départ est celle-ci :

Nom : overup.png
Affichages : 124
Taille : 1,2 Ko

Encore une fois, les abscisses ne sont pas affectées si bien que la variable LX restera à sa valeur de 0. En revanche, l'ordonnée de départ du point supérieur gauche de l'image de destination est désormais de y. Il faut donc le réduire peu à peu jusqu'à ce qu'il atteigne la valeur 0 attendue.

Voici la ligne de code à inclure dans le gestionnaire OnClick du bouton pour obtenir l'effet désiré :

Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
LY := imgResult.ClientHeight - imgResult.ClientHeight * fStep div
      100; // OVERUP

Une copie d'écran correspondant à ce recouvrement a donné ceci :

Nom : boverup.png
Affichages : 151
Taille : 281,0 Ko

Le recouvrement OverRight

Le recouvrement OverRight correspond à un autre cas de figure. En effet, ce ne sont pas les ordonnées qui seront modifiées, mais les abscisses. LY sera donc laissée en paix et c'est la variable locale LX qui devra s'adapter en fonction du temps.

Son schéma de fonctionnement est le suivant :

Nom : overright.png
Affichages : 116
Taille : 969 octets

Partant de -x, l'abscisse du point supérieur gauche de l'image de destination devra atteindre 0, donc augmenter progressivement. Nous savons que la largeur de l'image est fournie par la méthode ClientHeight de l'image d'affichage du résultat. La formule retenue sera par conséquent :

Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
LX := -imgResult.ClientWidth + imgResult.ClientWidth * fStep div
      100; // OVERRIGHT

Un écran tel que celui-ci devrait être obtenu:

Nom : boverright.png
Affichages : 135
Taille : 281,0 Ko

Le recouvrement OverLeft

Le recouvrement OverLeft est sans surprise : comme attendu, il inverse les valeurs utilisées précédemment.

Son schéma de fonctionnement est celui-ci :

Nom : overleft.png
Affichages : 115
Taille : 1,2 Ko

Partant de x, l'abscisse du point supérieur gauche de l'image de destination devra atteindre 0, donc diminuer progressivement. La formule retenue sera par conséquent :

Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
LX := imgResult.ClientWidth - imgResult.ClientWidth * fStep div
      100; // OVERLEFT

Un instantané d'écran pourra donner :

Nom : boverleft.png
Affichages : 134
Taille : 291,5 Ko

Nos quatre premières transitions sont prêtes. Très prochainement, nous compliquerons (à peine) nos calculs pour d'autres transitions un peu plus spectaculaires !

Envoyer le billet « Les transitions entre images sous Lazarus avec BGRABitmap (VII) - Le recouvrement » dans le blog Viadeo Envoyer le billet « Les transitions entre images sous Lazarus avec BGRABitmap (VII) - Le recouvrement » dans le blog Twitter Envoyer le billet « Les transitions entre images sous Lazarus avec BGRABitmap (VII) - Le recouvrement » dans le blog Google Envoyer le billet « Les transitions entre images sous Lazarus avec BGRABitmap (VII) - Le recouvrement » dans le blog Facebook Envoyer le billet « Les transitions entre images sous Lazarus avec BGRABitmap (VII) - Le recouvrement » dans le blog Digg Envoyer le billet « Les transitions entre images sous Lazarus avec BGRABitmap (VII) - Le recouvrement » dans le blog Delicious Envoyer le billet « Les transitions entre images sous Lazarus avec BGRABitmap (VII) - Le recouvrement » dans le blog MySpace Envoyer le billet « Les transitions entre images sous Lazarus avec BGRABitmap (VII) - Le recouvrement » dans le blog Yahoo

Mis à jour 26/03/2018 à 12h59 par gvasseur58

Catégories
Programmation , Free Pascal , Lazarus , Graphisme

Commentaires