1. #1
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 1 306
    Points : 13 142
    Points
    13 142
    Billets dans le blog
    72

    Par défaut Créer des transitions d'image à image avec Lazarus et BGRABitmap (5) - Rotations, homothéties et filtres

    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.
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    juillet 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2009
    Messages : 112
    Points : 411
    Points
    411

    Par défaut

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LX := (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);
    Enfin, le BGRAReplace est un peu superflu dans le dernier exemple.

    Tu peux écrire directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LBGRABlurMotion := LBGRABlurMotion.FilterBlurMotion(100 - fStep, 100 - fStep, False) as TBGRABitmap;
    LBGRATemp.PutImage(LX, LY, LBGRABlurMotion, dmDrawWithTransparency, Opacity);
    LBGRABlurMotion.Free;
    Après, le flou de déplacement est un peu compliqué à calculer alors oui c'est un peu lent. Peut-être qu'il serait possible de faire une version plus rapide avec un peu moins de qualité.

    Cordialement
    Par-delà nos conceptions du bien et du mal se trouve une prairie. Je te rencontrerai là-bas.

  3. #3
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 1 306
    Points : 13 142
    Points
    13 142
    Billets dans le blog
    72

    Par défaut

    Bonjour 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 .

    Citation Envoyé par circular17 Voir le message
    Concernant l'allocation d'objets intermédiaires, il est en fait possible de dessiner et redimensionner en une instruction StretchPutImage.
    Cette méthode m'avait échappé et je vais voir à quels moments elle peut être utile, y compris dans le composant final !

    Citation Envoyé par circular17 Voir le message
    Enfin, le BGRAReplace est un peu superflu dans le dernier exemple.
    Ton "un peu" est indulgent : j'ai changé le code dans le tutoriel et je t'ai évidemment ajouté à la liste des contributeurs.

    Citation Envoyé par circular17 Voir le message
    Après, le flou de déplacement est un peu compliqué à calculer alors oui c'est un peu lent. Peut-être qu'il serait possible de faire une version plus rapide avec un peu moins de qualité.
    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,

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  4. #4
    Responsable Delphi

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    février 2013
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : février 2013
    Messages : 1 306
    Points : 13 142
    Points
    13 142
    Billets dans le blog
    72

    Par défaut

    Re-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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    LX := (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);
    Cela n'enlève rien à ta remarque : l'utilisation de StretchPutImage est plus efficace et plus élégante. En revanche, les calculs sont un peu plus difficiles à établir...

    Dans le composant final, les méthodes sont bien plus simples et StretchPutImage devrait naturellement trouver sa place dans ... la prochaine version .

    Cordialement,

    Gilles
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    juillet 2009
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : juillet 2009
    Messages : 112
    Points : 411
    Points
    411

    Par défaut

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    LX := (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);
    Cordialement
    Par-delà nos conceptions du bien et du mal se trouve une prairie. Je te rencontrerai là-bas.

Discussions similaires

  1. Réponses: 3
    Dernier message: 08/07/2018, 17h48
  2. Réponses: 0
    Dernier message: 08/06/2018, 10h12
  3. Réponses: 0
    Dernier message: 24/05/2018, 11h48
  4. Réponses: 27
    Dernier message: 23/05/2018, 21h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo