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# Discussion :

[C#] Screenshot et flux


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut [C#] Screenshot et flux
    Bonsoir,
    a tous je realiser des screenshots grace a ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
              Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
                Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot);
                gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
    bmpScreenshot.Save("img.png", ImageFormat.Png);
    J'aurai voulu savoir comment stocker l'image dans un string afin que je puisse l'envoyer par socket ?

    Merci d'avance,
    Cordialement,
    NeoKript

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    tu doit pouvoir l'envoyer en tant que variable image avec .net remoting par socket

    sinon tu peux transformer l'image en tableau d'octets avec .save et la surcharge qui demande un string je crois
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    222
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 222
    Par défaut
    Sinon, tu peux regarder du coté de la classe MemoryStream qui te permet de stocker le flux mémoire d'une image.


    http://msdn.microsoft.com/fr-fr/libr...8VS.95%29.aspx

    La classe System.Drawing.Image à une fonction Save() permettant de stocker l'image dans un MemoryStream.

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Bonjour et merci pour vos réponses.

    J'ai essayé ceci d'un côté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            private void    ScreenShot(String Destinataire, String Commande, String Elem)
            {
                Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
                Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot);
                gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
                MemoryStream m = new MemoryStream();
                bmpScreenshot.Save(m, ImageFormat.Png);
                String content = Convert.ToString(m);
                String packet = Packet.BuildPacket(Destinataire, Commande, content);
                this.PushSend(packet);
            }
    et ce la de l'autre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            private void ScreenShot(String Content)
            {
                try
                {
                    MemoryStream m = new MemoryStream(System.Text.Encoding.ASCII.GetBytes(Content));
                    Bitmap bmp = new Bitmap(m);
                    bmp.Save("C:\\coucou.png");
                }
                catch (Exception e)
                {
                    String test = e.Message;
                }
            }

    Cependant j'ai une exception test vaut
    "Le paramètre n'est pas valide.."
    a cette ligne =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bitmap bmp = new Bitmap(m);
    Si vous avez une idée.
    Merci d'avance.

    Cordialement,
    NeoKript

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    l'erreur vient surement du fait que les octets obtenus et les octets récupérés de l'autre coté ne sont pas les même

    si tu as plus de 8ko à transférer, le socket coupe la trame en plusieurs partie
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Concernant la trame elle est complète...

    J'ai un buffer tournant et pour chaque trame, j'envoie la taille du packet en début de packet (codé sur 3 octects).

    Pour l'encodage en base 64 je ne voit pas trop l'intérêt pourrais-tu développer ?


    EDIT ->

    En fait le souci cést que : renvoie
    "System.IO.MemoryStream"
    Merci !

  7. #7
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    J'ai corriger cela maintenant j'ai les bonnes trames avec les bon caractères
    "?PNG\n\t\0\0->" ... etc

    Voici le code ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            private void    ScreenShot(String Destinataire, String Commande, String Elem)
            {
                Bitmap bmpScreenshot = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height, PixelFormat.Format32bppArgb);
                Graphics gfxScreenshot = Graphics.FromImage(bmpScreenshot);
                gfxScreenshot.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, Screen.PrimaryScreen.Bounds.Size, CopyPixelOperation.SourceCopy);
                DateTime d = DateTime.Now;
                String name = Convert.ToString(d.Year) + "-" + Convert.ToString(d.Month).PadLeft(2, '0') + "-" + Convert.ToString(d.Day).PadLeft(2, '0') + "__" + Convert.ToString(d.Hour).PadLeft(2, '0') + "-" + Convert.ToString(d.Minute).PadLeft(2, '0') + "-" + Convert.ToString(d.Second).PadLeft(2, '0') + ".png";
                MemoryStream m = new MemoryStream();
                bmpScreenshot.Save(m, ImageFormat.Png);
                String content = System.Text.Encoding.ASCII.GetString(m.GetBuffer());
                String packet = Packet.BuildPacket(Destinataire, Commande, content);
                this.PushSend(packet);
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
            private void ScreenShot(String Content)
            {
                try
                {
                    MemoryStream m = new MemoryStream((System.Text.Encoding.ASCII.GetBytes(Content)));
                    Bitmap bmp = new Bitmap(m);
                    bmp.Save("C:\\coucou.png");
                }
                catch (Exception e)
                {
                    String test = e.Message;
                }
            }

    Si vous avez une idée ...
    Merci

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 196
    Par défaut
    Bonjour,
    Je passais sur le poste et j'ai posté un peu vite sans voir les derniers messages qui sont arrivés pendant ma rédaction

    Je me disais juste qu'une conversion en base 64 permettrait de passer vite fait d'un byte[] en string en étant sur de finir avec quelque chose de facile à envoyer (être sur de n'avoir que des caractères affichables, pas d'octet à zéro...)

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 196
    Par défaut
    Bonjour,
    Pour un transfert via le réseau en mode texte, passé par un encoding en base 64 peut être une idée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    MemoryStream ms = new MemoryStream();
    // Save to memory using the Jpeg format
    bmp.Save (ms, ImageFormat.Jpeg);
    string base64String  = System.Convert.ToBase64String(ms.GetBuffer(),0,ms.GetBuffer().Length

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

Discussions similaires

  1. screenshot
    Par Heimdall dans le forum Windows
    Réponses: 9
    Dernier message: 08/08/2003, 11h33
  2. Screenshot
    Par rellik dans le forum Composants VCL
    Réponses: 8
    Dernier message: 05/08/2003, 12h28
  3. Rediriger un flux de données sous linux
    Par Nicaisse dans le forum POSIX
    Réponses: 7
    Dernier message: 01/07/2003, 16h04
  4. Copie d'un flux dans un autre
    Par Morvan Mikael dans le forum Langage
    Réponses: 5
    Dernier message: 03/06/2003, 09h40
  5. [reseaux] redirection de flux
    Par Olive1808 dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 12/08/2002, 09h24

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