Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

[BGRABitmap] Étirer une image


Sujet :

Lazarus Pascal

  1. #1
    Membre habitué
    [BGRABitmap] Étirer une image
    Mon problème va paraître basique à beaucoup d'entre-vous mais, après plus d'une journée passée à faire des tests et à lire les tutoriels de G. Vasseur et à chercher des pistes sur les forums, je me résoud à solliciter l'aide de la communauté.
    Je cherche à ajuster une image (par un facteur de zoom) à l'espace disponible sur mon écran soit 954 pixels en hauteur et 1350 pixels en largueur ( homothétique du format A4 paysage). J'ai chargé mon image dans un BGRAImageManipulation dont le nom est BGRA_GC_IMgZ et il me reste à lui appliquer un effet de zoom, à priori en utilisant StretchPutImage ou StretchPutIMageProportionaly mais je n'arrive pas à obtenir le résultat escompté à savoir une image entièrement inscrite dans un cadre de dimension 1350 pixels* 954 pixels.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     BGRA_GC_ImgZ.Top  := 5 ;  // le container image position et taille
        BGRA_GC_ImgZ.Left := 5 ;
        BGRA_GC_ImgZ.Height := TaillImgOrigH ;
        BGRA_GC_ImgZ.Width  := TaillImgOrigW ;
        BGRA_GC_ImgZ.Bitmap.loadFromFile(NomImg2);  // L'image est chargée dans le Container BGRA_GC_ImgZ
     
        Img_orig := TBGRABitmap.create(TaillImgOrigW, TaillImgOrigH, 255) ; // l'image d'origine à la taille non ajustée
        Img_Ajust := TBGRABitmap.create(Nll_larg, Nll_Haut,255) ;   // l'image dont la taille est ajustée à celle disponible
        Img_Ajust.StretchPutImage(Img_Ajust.ClipRect,Img_orig, dmDRawwithTRansparency  );
        BGRA_GC_ImgZ.redrawBitmap ;


    Je souhaite ensuite sauvegarder l'image dont la taille a été ajustée pour d'autres traitements.
    Je vous remercie par avance pour vos explications.

    R.O.

  2. #2
    Membre expert
    Salut pour moi une grosse erreurs au premier coup d'oeil. Ton image d'origine "Img_orig" est vide car tu ne charges pas ton fichier dedans, c'est peut-être pour ça
    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Membre habitué
    Citation Envoyé par BeanzMaster Voir le message
    Salut pour moi une grosse erreurs au premier coup d'oeil. Ton image d'origine "Img_orig" est vide car tu ne charges pas ton fichier dedans, c'est peut-être pour ça
    A+

    Bonjour et merci pour la réponse rapide,
    Je voyais bien que mon image Img_Orig était vide mais cela vient du fait que je ne saisi pas bien la relation qu'il y a entre le BGRAGraphicscontrol qui me permet d'afficher la même image (NomImg2 - soit une image jpg avec son nom et son chemin complet ) par la ligne
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    BGRA_GC_ImgZ.Bitmap.loadFromFile(NomImg2);  // L'image est chargée dans le Container BGRA_GC_ImgZ

    et l'image BGRA qui serait chargée par le code
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Img_orig := TBGRABitmap.create(NOmImg2) ; // l'image d'origine à la taille non ajustée

    sur laquelle il faut appliquer la transformation
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    Img_Ajust.StretchPutImage(Img_Ajust.ClipRect,Img_orig, dmDRawwithTRansparency  );

    qui permet l'affichage de l'image à la dimension souhaitée. Cette dernière image ajustée étant celle que je souhaite sauvegarder pour une utilisation future.

    J'ajoute que, pour écrire mon code, je me suis inspiré de l'une des rares discussions en français sur le sujet :celle initiée par le 26/11/18 par Jihelpi à laquelle vous aviez participé mais, de toute évidence je n'ai pas tout compris. en particulier lle rôle du BGRAContolGraphic et les arguments du SttrechPutImage .

    Cordialement

    R.O.

  4. #4
    Rédacteur/Modérateur

    Bonjour !

    S'il s'agit seulement d'étirer une image, vous n'avez pas besoin des composants BGRAControls. Vous pouvez le faire très simplement avec la méthode Resample de la classe TBGRABitmap (exemple).

    Ou alors avez-vous une autre raison de vouloir utiliser le composant BGRAImageManipulation ?

  5. #5
    Membre habitué
    BGRAGRaphicControl, ajuster une image à la taile écran et la sauvegarder
    Bonsoir,

    Non je n'ai pas besoin de faire d'autres transformations que l'ajustement de l'image à la taille d'écran disponible. Dire que la solution était aussi simple (simplement se rendre compte que Zoomer pouvait être synonyme d'Etirer !!

    Merci R. Chastain.

    Cordialement

    R.O.

  6. #6
    Membre habitué
    BGRA - Etirer une image
    A nouveau Bonsoir,

    La suggestion de Roland Chastain m'a permis de résoudre mon problème et Merci encore une fois. Il n'empêche que quelques démos facilement accessibles seraient les bienvenues pour comprendre ce qui se cache exactement derrière les paramètres affichés par les diverses procédures des TBGRAControlGraphic et TPaintBox par exemple pourquoi des Trectangles, dans certains cas des Graphic et d'autres des Bitmap, etc...
    Enfin, pour moi encore Merci.

    R.O.

###raw>template_hook.ano_emploi###