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

Composants VCL Delphi Discussion :

ScrollBox en TImage


Sujet :

Composants VCL Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Par défaut ScrollBox en TImage
    Bonjour,

    J'ai un ScrollBox dans ma form et je voudrais le mettre en image (bmp, ou Timage) mais je n'y arrive point.
    J'ai essayé:
    ScrollBox1.Brush.Bitmap.SaveToFile("test.bmp")
    et ScrollBox1.Parent.Brush.Bitmap.SaveToFile("test.bmp")

    Mais sans succès... J'ai toujours une erreur de mémoire qui me plante mon programme (Sous borland).
    Or pour un Timage: Image1.Picture.Bitmap.SaveToFile("test.bmp") ça marche trés bien...

    Merci de votre aide si vous avez la moindre idée....

    Stan

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    Essaye plutôt la méthode PaintTo du ScrollBox, vers un Canvas temporaire qui lui sauvegardera l'image

    le Brush, c'est le style du pinceau en cours, ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Par défaut
    Quelque chose comme ça?
    ScrollBox1.PaintTo(Image1.Picture.Bitmap.Canvas,0,0);

    Comme ça ça ne fonctionne pas, je n'ai pas d'erreur mais l'image ne s'affiche pas (J'ai mis une couleur de fond et un texte pour l'exemple)

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    La cible de PaintTo est un DC, il faut lui passer un handle, ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture.Bitmap.Canvas.Handle
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ScrollBox1.PaintTo(Image1.Picture.Bitmap.Canvas.Handle,0,0);
    Ca ne marche pas mieux malheuresement
    La seul solution que j'ai trouvé pour l'instant c'est récupérer sur une impression écran mais ça ne résout pas mon soucis puisque ça sera une application en tache de fond....

    En tout cas merci de m'aider

  6. #6
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    Alors il faut soit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ScrollBox1.PaintTo(Image1.Canvas.Handle,0,0);
    mais tu n'affiche pas tous les composant, me demande pas pourquoi je ne le sais pas?

    Sinon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ScrollBox1.PaintTo(Image1.Canvas,0,0);
    Avec ca tu as tout les composant dans le Timage1

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Par défaut
    Merci bien mais cela fonctionne bien pour les composants dans mon srollbox mais pas pour mon flux VFW (avec capCreateCaptureWindow) ... La vidéo ne se copie pas dans le Timage...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Video=capCreateCaptureWindow("Capture Window",WS_CHILD | WS_VISIBLE,2,2,
            280,250,ScrollBox1.Handle,1) ;
    Ca fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Video=capCreateCaptureWindow("Capture Window",WS_CHILD | WS_VISIBLE,2,2,
            280,250,Image1.Canvas.Handle,1) ;
    Ne fonctionne pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Video=capCreateCaptureWindow("Capture Window",WS_CHILD | WS_VISIBLE,2,2,
            280,250,Image1.Canvas,1) ;
    Non plus

    En fait pour les 2 derniers codes je n'ai pas d'erreur mais aucune image ne s'affiche (comme pour le : "ScrollBox1.PaintTo(Image1.Canvas,0,0);")

    Une petite idée?

    Encore merci

  8. #8
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    Confusion entre Objet et Handle ...

    Image1.Canvas = Objet Delphi
    Image1.Canvas.Handle = Handle de l'Objet Window sous-jacent
    et donc, il suffit de lire l'Aide SDK MS API

    capCreateCaptureWindow prend en paramètre un parent ScrollBox1.Handle, et renvoie un HWND VFWAPI, qui n'est en fait qu'une fenêtre, qu'il faut afficher via SetWindowPos, ensuite, il me semble qu'il soit nécessaire de brancher des procédures pour écouter les message, cela m'a l'air bien avancé ... rien à voir avec les canvas ... je n'ai pas bien compris pourquoi tu passe de le copie de l'image d'un scrollbox dans une image, et la gestion de webcam par exemple ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Par défaut
    En fait c'est un projet que j'ai en cours mais que j'ai voulus dévelloper chez moi plutôt et dans l'exemple que notre prof nous a donné il y avait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Video=capCreateCaptureWindow("Capture Window",WS_CHILD | WS_VISIBLE,2,2,
            280,250,ScrollBox1.Handle,1) ;
    Et lui traiter les images en fesant une copie d'écran... Un truc de bricolo quoi... Et moi j'ai besoin de faire tourner mon programme en tache de fond donc je ne peut pas utiliser cette méthode de toute façon !

    Ensuite pour mon traitement d'image j'ai besoin de travailler sur les pixels bien entendu et je ne peux pas (à ma connaissance) le faire depuis un scrollBox, c'est pourquoi je veux le mettre en TImage...

    Après en fesant un:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    capFileSaveDIB(Video, "cam.BMP");
    Image1.Picture.Bitmap.LoadFromFile("cam.BMP");
    J'ai un soucis de lenteur...

  10. #10
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    Effectivement, le PaintTo, va dessiner ce qu'il doit dessiner, donc une application cachée, ne devrait rien dessiner (du moins si a l'intérieur les composants vérifie si ils sont vraiement visible, il ne feront rien, inutile de calculer un dessin compliqué pour rien, windows par exemple ne dessinera pas les buttons ou scrollbar mais juste les containers vide comme le TEdit), de plus, une Form par exemple ne répond pas du tout comme une ScrollBox, ... comme si les events étaient "retardées"

    Citation Envoyé par Qwazerty
    mais tu n'affiche pas tous les composant, me demande pas pourquoi je ne le sais pas?
    cela m'étonne car PaintTo(Canvas) appel PaintTo(DC) ... étrange différence ???

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TWinControl.PaintTo(Canvas: TCanvas; X, Y: Integer);
    begin
      Canvas.Lock;
      try
        PaintTo(Canvas.Handle, X, Y);
      finally
        Canvas.Unlock;
      end;
    end;
    Sinon quel est ton but réel ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 11
    Par défaut
    Mon but réel, j'ai une webcam, je veux en tirer un tableau avec les pixels en RGB, toute les 50-100ms par exemple, afin de faire un filtre dessus après et une détection de forme et tout le tralala (Mais ça encore je sais comment faire).

    Donc webcam -> Tableau de pixel. Voilà le but réel

  12. #12
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    SAlut
    Citation Envoyé par ShaiLeTroll Voir le message
    cela m'étonne car PaintTo(Canvas) appel PaintTo(DC) ... étrange différence ???
    Humm j'ai fait le teste et ca ne fonctionne absolument pas pareil je joind le fichier test, ca m'interesse de savoir pourquoi

    Bonne soirée a plus
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  13. #13
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    Citation Envoyé par Natsboss Voir le message
    Mon but réel, j'ai une webcam, je veux en tirer un tableau avec les pixels en RGB, toute les 50-100ms par exemple, afin de faire un filtre dessus après et une détection de forme et tout le tralala (Mais ça encore je sais comment faire).

    Donc webcam -> Tableau de pixel. Voilà le but réel
    Effectivement, capCreateCaptureWindow, est normalement la bonne solution, tu devrais etudier l'objet TCamera ou l'original JLCVideo qui utilise capCreateCaptureWindow, essaye de voir si leur comportement est plus stable ... surtout que la TCamera étant un TCustomPanel peut avoir une fonction PaintTo qui fonctionne ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Timage et Canvas??
    Par vanack dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/04/2007, 11h38
  2. ScrollBox
    Par Anonymous dans le forum Composants VCL
    Réponses: 3
    Dernier message: 03/12/2005, 09h17
  3. [TImage] Transfert de Picture par pixels.
    Par H2D dans le forum Langage
    Réponses: 9
    Dernier message: 25/10/2003, 14h37
  4. TImage
    Par Thylia dans le forum C++Builder
    Réponses: 5
    Dernier message: 09/07/2002, 20h03
  5. Création dynamique de TImages
    Par Dric dans le forum C++Builder
    Réponses: 10
    Dernier message: 08/07/2002, 12h36

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