Apprendre à créer des transitions d'image à image avec Lazarus et BGRABitmap
Par Gilles Vasseur (5)
Le 2018-06-15 07:21:51, par gvasseur58, Responsable Lazarus & Pascal
Apprendre à créer des transitions d'image à image - Rotations, homothéties et filtres
Avec Lazarus et BGRABitmap
Bonjour à toutes et à tous !
Nous poursuivons notre exploration des différents types de transitions d'image à image en nous penchant sur les rotations, les homothéties et les filtres. Ce sont trois nouvelles occasions d'approfondir notre connaissance de la bibliothèque BGRABitmap.
Voici par exemple une des transitions que vous obtiendrez en lisant ce tutoriel :
Pour lire le tutoriel, c'est ici : https://gilles-vasseur.developpez.co...sitions/bgra5/
Épisodes précédents :
Partie 1 : Installation et application de démonstration
Partie 2 : Les transitions simples
Partie 3 : Travailler avec des masques
Partie 4 : Bandes et splines
Que pensez-vous de ce tutoriel ?
Quelle utilisation faites-vous du graphisme avec Lazarus ?
Retrouvez les meilleurs cours et tutoriels pour apprendre la programmation avec Lazarus.
Avec Lazarus et BGRABitmap
Bonjour à toutes et à tous !
Nous poursuivons notre exploration des différents types de transitions d'image à image en nous penchant sur les rotations, les homothéties et les filtres. Ce sont trois nouvelles occasions d'approfondir notre connaissance de la bibliothèque BGRABitmap.
Voici par exemple une des transitions que vous obtiendrez en lisant ce tutoriel :
Pour lire le tutoriel, c'est ici : https://gilles-vasseur.developpez.co...sitions/bgra5/
Épisodes précédents :
Partie 1 : Installation et application de démonstration
Partie 2 : Les transitions simples
Partie 3 : Travailler avec des masques
Partie 4 : Bandes et splines
Retrouvez les meilleurs cours et tutoriels pour apprendre la programmation avec Lazarus.
-
circular17Membre confirméMerci pour le tutoriel. Toujours content de voir ma bibliothèque en action.
Au sujet de la rapidité d'exécution, il est possible d'accélérer le redimensionnement en utilisant le paramètre rmSimpleStretch avec Resample.
Concernant l'allocation d'objets intermédiaires, il est en fait possible de dessiner et redimensionner en une instruction StretchPutImage.
Code : 1
2
3LX := (imgResult.ClientWidth - fBGRATo.Width) div 2; LY := (imgResult.ClientHeight - fBgraTo.Height) div 2; LBGRATemp.StretchPutImage(Rect(LX, LY, fStep * imgResult.ClientWidth div 100, fStep * imgResult.ClientHeight div 100), fBGRATo, dmDrawWithTransparency, Opacity);
Tu peux écrire directement :
Code : 1
2
3LBGRABlurMotion := LBGRABlurMotion.FilterBlurMotion(100 - fStep, 100 - fStep, False) as TBGRABitmap; LBGRATemp.PutImage(LX, LY, LBGRABlurMotion, dmDrawWithTransparency, Opacity); LBGRABlurMotion.Free;
Cordialementle 19/06/2018 à 11:30 -
circular17Membre confirméBonjour,
Ah oui, je me suis trompé dans les paramètres de Rect. Les dernières paramètres sont Right et Bottom et non pas Width et Height.
Note sinon la fonction RectWithSize marche bien à la place. Elle est comme Rect mais prend Width et Height comme paramètres:
Code : 1
2
3LX := (imgResult.ClientWidth - fBGRATo.Width) div 2; LY := (imgResult.ClientHeight - fBgraTo.Height) div 2; LBGRATemp.StretchPutImage(RectWithSize(LX, LY, fStep * imgResult.ClientWidth div 100, fStep * imgResult.ClientHeight div 100), fBGRATo, dmDrawWithTransparency, Opacity);
le 08/07/2018 à 17:44 -
gvasseur58Responsable Lazarus & PascalBonjour Johann,
Merci de t'intéresser à ces tutoriels : rien ne vaut le concepteur de la bibliothèque pour repérer les faiblesses de son utilisation.
Cette méthode m'avait échappé et je vais voir à quels moments elle peut être utile, y compris dans le composant final !
Ton "un peu" est indulgent : j'ai changé le code dans le tutoriel et je t'ai évidemment ajouté à la liste des contributeurs.
La formule que j'ai employée est peut-être malheureuse, car ton implémentation du flou est vraiment efficace. C'est tout bonnement le flou qui pose en général problème. Cela dit, dans le composant final, les
performances ne sont pas si mauvaises que ça en choisissant de bons paramètres.
Encore merci et au plaisir de te lire,
Gillesle 19/06/2018 à 14:39 -
gvasseur58Responsable Lazarus & PascalRe-bonjour,
J'ai testé ton code, mais, sauf erreur de ma part, il ne fonctionne pas tel quel : fBGRATo étant une image fixe, il n'y a pas le déplacement voulu des coordonnées de départ (le centre) vers le coin supérieur gauche. Les formules sont un peu plus complexes :Code : 1
2
3
4
5LX := (imgResult.ClientWidth - fStep * imgResult.ClientWidth div 100) div 2; LY := (imgResult.ClientHeight - fStep * imgResult.ClientHeight div 100) div 2; LBGRATemp.StretchPutImage(Rect(LX, LY, LX + fStep * imgResult.ClientWidth div 100, LY + fStep * imgResult.ClientHeight div 100), fBGRATo, dmDrawWithTransparency, Opacity);
Dans le composant final, les méthodes sont bien plus simples et StretchPutImage devrait naturellement trouver sa place dans ... la prochaine version.
Cordialement,
Gillesle 19/06/2018 à 17:30