IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

C++Builder Discussion :

[TImageList] Adapter dynamiquement hauteur et largeur


Sujet :

C++Builder

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 20
    Points : 19
    Points
    19
    Par défaut [TImageList] Adapter dynamiquement hauteur et largeur
    Bonjour,

    Est-il possible de changer dynamiquement la hauteur et la largeur d'une TImageList pour modifier la taille des images qui y sont intégrées.
    Je voudrais adapter la taille de l'image du drag&drop en fonction de la définition de l'écran.
    Peut-on par exemple accéder aux Options : rogner, ajuster par du code.
    par avance merci.

  2. #2
    Membre habitué

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 137
    Points : 161
    Points
    161
    Par défaut
    Je crois que si tu changes la taille, la TImageList se vide...

    La fonction TImageList::StrechDraw permet d'adapter la taille de destination, sans changer la taille du TImageList. A voir.

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    Merci pour ta réponse mais je n'ai pas trouvé la méthode StretchDraw pour TImageList mais seulement pour Tcanvas.
    Mon problème est que lors des D&D, l'image "fantome" de l'objet dragué (qui suit la souris) est trop grande et donc peu esthétique si la définition de l'affichage est trop basse par exemple 600x800.
    Je voudrais éviter de charger des différentes tailles d'images dans la TImageList en fonction de la définition de l'affichage c'est peu élégant peu fiable et surtout les bmp prennent vite de la place.

    à bientôt

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 137
    Points : 161
    Points
    161
    Par défaut
    Peut être que tu peux faire comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    TBitmap *pBitmap = new TBitmap;
    ImageList->GetBitmap(index, pBitmap);
    CanvasDest->StretchDraw(rect, pBitmap);
    delete pBitmap;

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    je ne suis pas arrivé à obtenir la même image en plus petit.
    Je recherche une méthode permetant de copier une image bitmap dans un autre bitmap mais de taille différente.
    L'équivalent d'un stretch d'un bitmap sur un autre.
    La methode StretchDraw ne permet que de dessiner dans un canvas avec la dimension du rectangle passé en paramètre, je n'arrive pas à réccupérer le bitmap à la nouvelle dimension.

    J'obtiens le même résultat en utilisant le canvas d'un TImage.
    Il semble que l'aspect de l'image dans un TImage soit calculé en fonction des paramètres Stretch, Proportionnal et qu'il n'existe pas d'instance du bitmap transformé ?
    a+

  6. #6
    Membre actif
    Avatar de Djob
    Inscrit en
    Août 2002
    Messages
    215
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 215
    Points : 279
    Points
    279
    Par défaut
    Je recherche une méthode permetant de copier une image bitmap dans un autre bitmap mais de taille différente.
    à mon avis slylafone t'as presque donné donné le résultat
    car en fait l'objet TBitmap contient en son sein un Canvas...
    ..donc il suffit de faire une nouveau TBitmap avec les nouvelles dimensions
    qui contient un Canvas avec les nouvelles dimensions...

    exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    void __fastcall ResizeBitmap(Graphics::TBitmap * BitmapSource,Graphics::TBitmap * BitmapDest,int new_height,int new_width)
    {
         if(BitmapSource==NULL || BitmapDest==NULL) return; //les bitmaps doivent être instanciées
     
         BitmapDest->Height=new_height;
         BitmapDest->Width =new_width;
         BitmapDest->Canvas->StretchDraw(BitmapDest->Canvas->ClipRect,BitmapSource);
    }
     
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
            //exemple : récuperation de la premier image
            int index=0;
            Graphics::TBitmap *pBitmapSource = new Graphics::TBitmap();
            ImageList1->GetBitmap(index, pBitmapSource);
     
            // exemple : division de la taille de l'image par 2
            int new_height = pBitmapSource->Height/2;
            int new_width = pBitmapSource->Width/2;
     
            //redimensionnement
            Graphics::TBitmap *pBitmapDest  = new Graphics::TBitmap();
            ResizeBitmap(pBitmapSource,pBitmapDest,new_height,new_width);
            delete pBitmapSource;
     
            //dessin sur la fiche
            Form1->Canvas->Draw(0,0,pBitmapDest);
            delete pBitmapDest;
    }

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    merci à tous les deux pour vos réponses.
    Je fais le test.
    en fait c'est la première fois que je manipule des images bitmap et je n'avais pas tout compris sur leurs fonctionnements.
    à bientot

  8. #8
    Membre à l'essai
    Inscrit en
    Novembre 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 20
    Points : 19
    Points
    19
    Par défaut
    tout fonctionne comme prévu.
    En fait je ne connaissait pas la propriété ClipRect.
    encore merci à tous les deux.
    gerard

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Adapter la hauteur d'un textarea à son contenu dynamique
    Par renaud26 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 10/04/2009, 12h05
  2. Background de 100% en hauteur et largeur
    Par Rexlapin dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 07/02/2007, 11h47
  3. Adaptation dynamique des composants d'une JFrame
    Par Invité dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 06/12/2006, 23h23
  4. [JMF][MediaPlayer] hauteur et largeur de la video
    Par mbp566 dans le forum Multimédia
    Réponses: 3
    Dernier message: 07/08/2002, 16h19

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