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

Windows Presentation Foundation Discussion :

Créer un bitmap représentant l'état d'une form


Sujet :

Windows Presentation Foundation

  1. #1
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut Créer un bitmap représentant l'état d'une form
    Bonjour tout le monde,

    je viens vers vous car je butte sur un problème que je n'arrive pas à résoudre : j'aimerai créer un bitmap, représentant l'état actuel de ma fenêtre. (comme une sorte d'impression écran ).

    Pourriez vous me donner des pistes, car je ne sais pas par où commencer.

    Je vous remercie pour votre aide, et surtout pour vos pistes.

    Cordialement
    Finality

  2. #2
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Bonjour,

    J'utilise ça moi :

    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
     
    public static String saveCanvasToFile(String filePath, Canvas monCanvas)
    {
     
       System.Windows.Controls.Image bmp = new System.Windows.Controls.Image();
     
       RenderTargetBitmap rtb = new RenderTargetBitmap((int)monCanvas.ActualWidth, (int)monCanvas.ActualHeight, 96, 96, PixelFormats.Pbgra32);
     
       rtb.Render(monCanvas);
     
       bmp.Source = rtb;
     
       PngBitmapEncoder png = new PngBitmapEncoder();
       png.Frames.Add(BitmapFrame.Create(rtb));
       using (Stream stm = File.Create(filePath))
       {
          png.Save(stm);
       }
     
       return filePath;
    }
    Certe c'est pour un Canvas, mais le code doit être adaptable pour une Form

  3. #3
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Effectivement, j'avais fait la même chose sur mon blog:

    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
    31
    32
    33
    34
    35
    36
     
    /// <summary>
    /// Mehod used to create a screenshot of a WPF control.
    /// </summary>
    /// <param name="visual">The control that will be used to create the screenshot.</param>
    /// <param name="file">The file where to store the screenshot.</param>
    private void CreateScreenShot(UIElement visual, string file)
    {
       double width = Convert.ToDouble(visual.GetValue(FrameworkElement.WidthProperty));
     
       double height = Convert.ToDouble(visual.GetValue(FrameworkElement.HeightProperty)); 
     
       if (double.IsNaN(width) || double.IsNaN(height))
       {
          throw new FormatException("You need to indicate the Width and Height values of the UIElement.");
       }
     
       RenderTargetBitmap render = new RenderTargetBitmap(
          Convert.ToInt32(width),
          Convert.ToInt32(visual.GetValue(FrameworkElement.HeightProperty)), 
          96, 
          96, 
          PixelFormats.Pbgra32); 
     
       // Indicate which control to render in the image
       render.Render(visual);
     
       using (FileStream stream = new FileStream(file, FileMode.Create))
       {
          PngBitmapEncoder encoder = new PngBitmapEncoder(); 
     
          encoder.Frames.Add(BitmapFrame.Create(render)); 
     
          encoder.Save(stream);
       }
    }

  4. #4
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Bonjour tous les deux,

    tout d'abord je vous remercie pour votre aide . Votre code fonctionne parfaitement.

    Néanmoins, j'ai essayé ce code avec une fenêtre créée par code (mais jamais ouverte). Dans ce cas là, la capture représente un écran noir, même si la nouvelle fenêtre possède un fond. Auriez-vous une solution pour ce problème ?

    Je vous remercie d'avance,
    Cordialement
    Finality

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Si tu ne fais pas de Show/ShowDialog, le moteur WPF n'a aucune information sur le rendu que doit avoir ta fenêtre d'où to résultat je pense.

    Essaye de faire un Show/ShowDialog de ta fenêtre mais en lui mettant une opacité à 0 par exemple

Discussions similaires

  1. [Débutant] créer un état d'une table de la base de données
    Par maestroENSI dans le forum C#
    Réponses: 5
    Dernier message: 25/08/2011, 16h30
  2. [Toutes versions] Créer un état mis en forme en fonction des résultats d'une requête
    Par Rodrigue dans le forum IHM
    Réponses: 1
    Dernier message: 19/11/2010, 09h07
  3. Comment créer un bitmap de travail dans une DLL
    Par colorid dans le forum Langage
    Réponses: 9
    Dernier message: 06/03/2009, 16h13
  4. Réponses: 1
    Dernier message: 26/01/2009, 14h33
  5. Créer un Bitmap dans une ScrollBox
    Par ero-sennin dans le forum Delphi
    Réponses: 9
    Dernier message: 01/08/2006, 18h34

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