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 :

Dessiner un DIB sur un TForm ou TPanel [Non suivi]


Sujet :

C++Builder

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut Dessiner un DIB sur un TForm ou TPanel
    Bonjour à tous,

    je cherche le moyen de dessiner un DIB sur un TForm ou TPanel.

    J'ai bien regardé du côté de la fonction DrawDIBDraw mais je ne vois pas trop comment l'utiliser.

    Merci d'avance pour vos lumières,

    Neilos

  2. #2
    Membre habitué
    Inscrit en
    Mars 2004
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 9
    Par défaut
    Il faut utiliser les fonctions du Canvas de la TForm 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
     
    void __fastcall TForm1::Button1Click(TObject *Sender)
     
    {
      Graphics::TBitmap *pBitmap = new Graphics::TBitmap();
      try
      {
        pBitmap->LoadFromFile("MyBitmap.png");
        pBitmap->Transparent = true;
        pBitmap->TransparentColor = pBitmap->Canvas->Brush->Color;
        Form1->Canvas->Draw(0,0,pBitmap);
        pBitmap->TransparentMode = tmAuto;  
        Form1->Canvas->Draw(50,50,pBitmap);
      }
      catch (...)
      {
        ShowMessage("Could not load or display bitmap");
      }
      delete pBitmap;
     
    }

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Oui mais je n'ai pas un TBitmap j'ai un DIB retourné par les fonctions VCM pour récupérer des frame....

    Je peut le caster en TBitmap ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 55
    Par défaut
    Tu peux probablement le caster en TBitmap... j'ai jamais essayé...

    J'utilise DrawDibDraw dans un de mes programmes, ça marche bien.

    il te faut une variable de type HDRAWDIB et l'initialiser avec DrawDibOpen();

    Ensuite au niveau du code de dessin, une variable HDC juste temporaire le temps de dessinner dessus.

    la fonction DrawDibDraw prend en params 1 et 2 les deux variables précédemment évoquées.
    les paramètres suivants détérminent l'emplacement de dessin.

    Le suivant, un LPBITMAPINFOHEADER est en fait contenu dans le DIB qu'on t'as refilé. tu peux faire un cast de ton DIB vers (LPBITMAPINFOHEADER).

    le suivant correspond aux données (LPVOID) elles sont dans le DIB, à la suite du header. mon buffer DIB est en char* je fais donc buffer+40 pour ce paramètre. ( le header prend 40 octets )

    les paramètres suivants determinent la part de la source qui est dessiné.

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Ok merci je vais tester ça dimanche soir (dès que je serais de retour chez moi !)

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 163
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 163
    Par défaut
    Salut il me reste un petit pb....je met quoi dans HDC ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 55
    Par défaut
    Ah oui c'est vrai...

    Dans une fonction d'initialisation du programme:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mainDC = DrawDibOpen(); // mainDC est de type HDRAWDIB

    A l'intérieur de la fonction de dessin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    HDC hdc;
    //...
     
    hdc = GetDC(Frm_main->Handle); //Frm_main est la form sur laquelle on dessine.
     
    // ... appel de DrawDibDraw(...)
     
     
    ReleaseDC(mainDC, hdc);
    et en sortie de prog :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (mainDC) DrawDibClose(mainDC);

    Voilà normalement ça devrait marcher...

Discussions similaires

  1. [Image]Dessiner des rectangles sur une image
    Par navona dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 09/03/2006, 22h51
  2. Dessiner en cliquant sur un bouton
    Par had182 dans le forum MFC
    Réponses: 4
    Dernier message: 22/01/2006, 21h26
  3. Dessiner un rectangle sur une forme
    Par Neo41 dans le forum MFC
    Réponses: 6
    Dernier message: 13/08/2005, 01h08
  4. Dessin à la volée sur composant transparent
    Par orelero dans le forum 2D
    Réponses: 1
    Dernier message: 28/07/2005, 17h12
  5. Réponses: 3
    Dernier message: 29/06/2005, 14h29

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