none
Comment coller le press-papier dans un fichier image en mode console ? RRS feed

  • Question

  • Bonjour,

    J'ai une application console et je souhaite coller le press-papier en vérifiant qu'il contient une image dans un fichier.

    Vu que la classe System.Drawing.Image est abstraite, je ne peux pas l'instancier

    J'ai essayé avec un PictureBox mais je n'arrive pa à le sauver.

    Voici mon Code:

    if (System.Windows.Forms.Clipboard.ContainsImage())
      {
         PictureBox pb = new System.Windows.Forms.PictureBox();
         pb.Image = Clipboard.GetImage();
         StreamWriter sw3 = new StreamWriter("image1.jpg");
          sw3.Write(pb.Image);
          sw3.Flush();
          sw3.Close();
          sw3.Dispose();
      }
    // mon image fait 0 Ko
    

    Quelqu'un a-t-il une idée ?


    fred on youTube
    HTML Document Creator on codeplex
    fred
    jeudi 27 octobre 2011 13:05

Réponses

  • Bonjour,

    Vous pouvez utiliser la méthode Save de System.Drawing.Image. Il faut noter que la classe Clipboard peut être utilisée uniquement dans les threads configurés en mode STA (Single Thread Apartment). Pour utiliser cette classe, veillez à ce que votre méthode Main soit marquée avec l'attribut STAThreadAttribute.

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace CopyClipBoard
    {
        class Program
        {
            [STAThreadAttribute]
            static void Main(string[] args)
            {
                if (Clipboard.ContainsImage())
                {
                    Image img = Clipboard.GetImage();
                    img.Save("image1.jpg");
                }
            }
        }
    }
    

    Cordialement,


    aelassas.free.fr
    • Proposé comme réponse Ciprian Duduiala vendredi 28 octobre 2011 08:02
    • Non proposé comme réponse fred75 vendredi 28 octobre 2011 09:16
    • Marqué comme réponse fred75 vendredi 28 octobre 2011 09:44
    jeudi 27 octobre 2011 14:18
    Auteur de réponse

Toutes les réponses

  • Bonjour,

    Pourquoi l'instancier ? Il y'a une méthode Image.Save qui permet de l'enregistrer directement dans un fichier tout en précisant le format (http://msdn.microsoft.com/en-us/library/9t4syfhh.aspx). Il serait même possible de préciser des paramètres supplémentaires (par exemple le taux de compression jpg).


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Proposé comme réponse Ciprian Duduiala vendredi 28 octobre 2011 08:02
    • Non proposé comme réponse fred75 vendredi 28 octobre 2011 09:31
    jeudi 27 octobre 2011 14:17
    Modérateur
  • Bonjour,

    Vous pouvez utiliser la méthode Save de System.Drawing.Image. Il faut noter que la classe Clipboard peut être utilisée uniquement dans les threads configurés en mode STA (Single Thread Apartment). Pour utiliser cette classe, veillez à ce que votre méthode Main soit marquée avec l'attribut STAThreadAttribute.

    using System;
    using System.Drawing;
    using System.Windows.Forms;
    
    namespace CopyClipBoard
    {
        class Program
        {
            [STAThreadAttribute]
            static void Main(string[] args)
            {
                if (Clipboard.ContainsImage())
                {
                    Image img = Clipboard.GetImage();
                    img.Save("image1.jpg");
                }
            }
        }
    }
    

    Cordialement,


    aelassas.free.fr
    • Proposé comme réponse Ciprian Duduiala vendredi 28 octobre 2011 08:02
    • Non proposé comme réponse fred75 vendredi 28 octobre 2011 09:16
    • Marqué comme réponse fred75 vendredi 28 octobre 2011 09:44
    jeudi 27 octobre 2011 14:18
    Auteur de réponse
  • Les images sont des binaires de formats bien particulières; c'est mieux alors d'utiliser la classe BinaryReader et construire le header avant de le concaténer au buffer (byte[]) et l enregistrer.

    http://www.fastgraph.com/help/jpeg_header_format.html

    jeudi 27 octobre 2011 23:26
  • ok merci pour ces infos

     

     


    fred on youTube
    HTML Document Creator on codeplex
    fred
    • Modifié fred75 vendredi 28 octobre 2011 09:44
    vendredi 28 octobre 2011 09:33
  • Ce que fera img.Save en précisant le format en deuxième paramètre. Avec un 3ème il est possible aussi d'indiquer le taux de compression JPG.

    Les images étant largement utilisées, la classe Bitmap (qui hérite de Image) permet de traiter les formats les plus répandus sans avoir à a créer sa propre bibliothèque...

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 28 octobre 2011 10:45
    Modérateur