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

Delphi Discussion :

Copier un canvas dans une image


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 219
    Par défaut Copier un canvas dans une image
    Bonjour,

    J'ai un logiciel dans lequel je dois générer un "rapport" qui doit contenir une partie du canvas (qui contient des éléments opengl) de ma fenêtre. J'ai utilisé les instructions suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Img.canvas.CopyMode := cmSrcCopy;
    Img.canvas.CopyRect(Rect1, Form1.Canvas, Rect2);
    Le problème est que certaines fenêtres sont dessus et déplaçable (avec la propriété always on top) mais cachent une partie de mon canvas. Du coup quand je fais la copie du canvas je vois ces fenêtres alors que je ne veux pas quelles apparaissent sur ma copie.
    Quelqu'un saurait-il comment je peux contourner ce problème, parce que je ne sais même pas comment savoir quelles sont les fenêtres qui sont visibles afin de les cacher pendant la génération de la copie.

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bonjour,
    A priori, et sauf erreur de ma part, il n'y a pas d'autre choix que de mettre Form1 au premier plan pour prendre la "photo" de son canvas.
    Mais n'y a-t-il pas la possibilité de sauver ce canvas dans un bitmap juste après la génération des éléments OpenGl et donc avant que d'autres fenêtres viennent se mettre au premier plan ? Ou bien de générer les éléments OpenGl directement dans le canvas d'un bitmap et d'afficher ce bitmap ?
    Eb.

  3. #3
    Membre émérite Avatar de Kaféine
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    569
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 569
    Par défaut
    Essai avec la méthode PaintTo de la form contenant ce que tu veux copier

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Par défaut
    Bien vu Kafeine, ce sont parfois les choses les plus simples qui échappent ...

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2004
    Messages : 219
    Par défaut
    Ouais, l'idée était parfaite... j'ai plus les fenêtre au dessus en utilisant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.PaintTo(Ima.Canvas, 0, 0);
    Par contre maintenant je n'ai même plus le contenu opengl, un grand rectangle blanc à la place :!

    Si ca peut aider dans le FormPaint() j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActivateRenderingContext(FDC, FRC);
    // Instructions opengl
    DeactivateRenderingContext;

Discussions similaires

  1. Copier un bout d'image dans une image de destination
    Par highlight dans le forum OpenCV
    Réponses: 7
    Dernier message: 16/04/2010, 09h44
  2. Copier une partie d'une form dans une image
    Par Duan dans le forum Débuter
    Réponses: 5
    Dernier message: 11/05/2009, 16h16
  3. Réponses: 4
    Dernier message: 19/06/2008, 15h41
  4. [OpenGL] Copier l'écran dans une image
    Par lXT95l dans le forum OpenGL
    Réponses: 2
    Dernier message: 02/01/2007, 23h34
  5. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44

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