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

VB.NET Discussion :

Visual studio 2010 Capture d'écran


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 50
    Par défaut Visual studio 2010 Capture d'écran
    Bonjour je souhaite faire un programme qui fasse des capture d'écran toutes les 10 secondes mais il devient très vite gourmant

    Pouvez-vous me dire ce qui cloche svp merci ?

    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
     
    Public Class Form1
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
            Do
                System.Threading.Thread.Sleep(10000)
                Opacity = 0
                Dim toto2 As String
                Dim toto1 As String
                Dim toto As String
                Dim NomFichier As String
     
                Dim Bounds As Rectangle
                Dim Screenshot As System.Drawing.Bitmap
                Dim Graph As Graphics
     
     
                Bounds = Screen.PrimaryScreen.Bounds
                Screenshot = New System.Drawing.Bitmap(Bounds.Width, Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
                Graph = Graphics.FromImage(Screenshot)
                Graph.CopyFromScreen(Bounds.X, Bounds.Y, 0, 0, Bounds.Size, CopyPixelOperation.SourceCopy)
                toto2 = Replace(Now, ":", "")
                toto1 = Replace(toto2, "/", "")
                toto = Replace(toto1, " ", "")
                NomFichier = "F:\LOGICIELS ACTIFS\Mon programme\" & toto & ".png"
                Screenshot.Save(NomFichier)
            Loop
        End Sub
     
    End Class

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 140
    Par défaut
    Je suis loin d'etre un pro, mais à 1ère vue ton code n'a pas de condition d'arrêt dans ton Do...Loop. Quand tu dit qu'il devient "très vite gourmand" tu voulait dire qu'il plante carrément ton PC ? M'étonnerait pas

    A priori, tu pourrait rajouter une condition d'arrêt de type FIFO avec la méthode Queue. Je l'ai vue quelquepart dans l'aide de VB...
    La taille de cette pile FIFO correspondrait au nombre d'images MAXIMUM que tu souhaite prendre des screenshots. A toi de calculer en fonction de ta place disponible sur ton disque dur, au rythme d'1 Screen/10secs, sachant la taille maxi d'1 screen...
    Cela signifie aussi que lorsqu'il y aura "dépassement de capacité" par rapport à ta condition d'arrêt, le screenshot le + "vieux" sera supprimé de ton PC (ou alors tu stop ton programme).

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 18
    Par défaut
    Tu devrais systématiquement appeler la méthode Dispose sur tes objets Bitmap :

    Cela t'évitera des fuites mémoire !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 50
    Par défaut
    J'ai changé mon code en y ajoutant les Screen.Dispose(). Cela donne de très bon résultat mais le processus prend quelques ko de ram après chaque Screenshot.

    Peut-on faire un programme qui fait des captures d'écran toutes les 10 secondes et qui garderait une utilisation de la ram quasi constante.


    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
     
    Public Class Form1
        Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
            Me.Timer1.Enabled = False
            Dim screen As Bitmap
            Dim toto2 As String
            Dim toto1 As String
            Dim toto As String
            Dim NomFichier As String
     
            SendKeys.SendWait("+{PRTSC}") 
            toto2 = Replace(Now, ":", "")
            toto1 = Replace(toto2, "/", "")
            toto = Replace(toto1, " ", "")
     
            NomFichier = "F:\LOGICIELS ACTIFS\Mon programme\" & toto & ".png"
     
            screen = CType(Clipboard.GetDataObject().GetData("Bitmap"), Bitmap)
            screen.Save(NomFichier)
            screen.Dispose()
            Clipboard.Clear()
            Me.Timer1.Enabled = True
     
        End Sub
    End Class

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 50
    Par défaut
    Problème reglé voici le code pour ceux que cela interesserait :

    Simple rajout de GC.Collect()

    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
     
     
        Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
     
            Me.Timer1.Enabled = False
            GC.Collect()
            Dim screen As Bitmap
            Dim toto2 As String
            Dim toto1 As String
            Dim toto As String
            Dim NomFichier As String
     
            ' simuler le PrintScreen enrichi 
            SendKeys.SendWait("+{PRTSC}")
            toto2 = Replace(Now, ":", "_")
            toto1 = Replace(toto2, "/", "_")
            toto = Replace(toto1, " ", "_")
            NomFichier = "F:\LOGICIELS ACTIFS\Mon programme\" & toto & ".png"
            ' récupérer l'image obtenue dans le Presse-Papier
            screen = CType(Clipboard.GetDataObject().GetData("Bitmap"), Bitmap)
            screen.Save(NomFichier)
            screen.Dispose()
            Me.Timer1.Enabled = True
     
        End Sub
    Merci à tous

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

Discussions similaires

  1. Visual Studio 2010 et .NET Framework 4.0 disponible en version Bêta
    Par Jérôme Lambert dans le forum Visual Studio
    Réponses: 32
    Dernier message: 03/09/2014, 22h36
  2. Réponses: 119
    Dernier message: 01/02/2011, 22h31
  3. F# sera inclus dans Visual Studio 2010
    Par LLB dans le forum F#
    Réponses: 7
    Dernier message: 16/06/2010, 13h43
  4. Réponses: 8
    Dernier message: 30/08/2009, 10h19
  5. Téléchargez la première CTP de Visual Studio 2010 et du .NET Framework 4.0
    Par Jérôme Lambert dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 31/10/2008, 11h49

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