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

Calcul scientifique Python Discussion :

Capture d'écran/Screencast


Sujet :

Calcul scientifique Python

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Par défaut Capture d'écran/Screencast
    Salut tout le monde!

    J'ai le projet de programmer en python un programme qui capturerait des vidéos de ce qui se passe à l'écran (screencast).
    J'aimerai que le programme soit portable Linux/Mac/Windows. J'ai donc le choix entre utiliser des fonctions et librairie portable ou bien détecter l'OS et utiliser la technique appropriée à l'os respectif.

    J'ai plusieurs pistes mais je ne suis pas encore arrivé à mes fins :
    - libraire pygame : image.load (j'arrive à prendre des captures d'écran uniquement de l'application python)
    - libraire PIL : qui je pense doit être utilisée avec screengrab (qui ne marche que sous windows lui!) mais j'obtiens l'erreur ci-dessous :
    "error: Python was built with Visual Studio version 7.1"
    - utiliser la commande import pour linux qui va créer un jpg et puis charger ce jpg avec pygame et pour windows j'ai essayé d'explorer les windll avec win32clipboard (de win32con). Cela consiste à charger le contenu de presse-papier, pour cela, on aura auparavant fait un windll.user32.keybd_event(42,0,0,0) qui simule l'appuie de la touche printscreen.
    Mais je n'arrive pas à lire du contenu bitmap depuis le press papier, ou alors celui-ci est vide. Je n'ai trouvé que des scripts qui font passer du texte.

    Si vous avez des avis, des idées ou des références, je suis preneur!
    Un grand merci d'avoir pris le temps de me lire,
    j'espère avoir été plus ou moins claire, n'hésitez pas à m'demander plus d'infos

    Johan

  2. #2
    Expert confirmé
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Par défaut
    Pour PIL, c'est ImageGrab ( http://python.developpez.com/cours/p.../imagegrab.php ) mais qui ne marche effectivement que sous windows (mais qui ne m'a jamais posé de problème)

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Bonjour,

    pour récupérer les données du clipboard avec win32com, voici un exemple de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    def getclipboarddata(format):
        win32clipboard.OpenClipboard()
        try:
            print 'getting data '+repr(format)
            result=win32clipboard.GetClipboardData(format)
        finally:
            win32clipboard.CloseClipboard()
        return result
    Le paramètre format est un entier précisant comment récupérer les données. Après un printscreen, les formats disponibles sont 2(CF_BITMAP), 8 (CF_DIB) et 17 (CF_DIBV5). Voir http://msdn2.microsoft.com/en-us/library/ms649013.aspx
    Par contre, il faut ensuite convertir ca en fichier .bmp (comment?).

    J'ai aussi trouvé ce code quelque part:

    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
     
    import win32gui, win32ui, win32con
    hwnd=win32gui.GetDesktopWindow()
    l,t,r,b=win32gui.GetWindowRect(hwnd)
    h=b-t
    w=r-l
    hDC = win32gui.GetWindowDC(hwnd)
    myDC=win32ui.CreateDCFromHandle(hDC)
    newDC=myDC.CreateCompatibleDC()
     
    myBitMap = win32ui.CreateBitmap()
    myBitMap.CreateCompatibleBitmap(myDC, w, h)
     
    newDC.SelectObject(myBitMap)
    newDC.BitBlt((0,0),(w, h) , myDC, (0,0), win32con.SRCCOPY)
    myBitMap.Paint(newDC)
    myBitMap.SaveBitmapFile(newDC,'c:\\tmp.bmp')
    mais a priori, ca n'apporte rien de plus que PIL (qui marche chez moi):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import Image, ImageGrab
    ImageGrab.grab().save(filename)
    En tout cas, ton projet m'intéresse, tiens nous au courant!

  4. #4
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    un coup d'oeil sur wikipedia et hop: vnc2swf, c'est multiplateforme et opensource.

    Il faut quand même d'installer un serveur vnc.

    Mais pourquoi se priver?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Par défaut
    Merci pour vos réponses les gars!

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 3
    Par défaut
    //// Avancement du travail ::

    Capture de l'image ::
    :: Windows : ImageGrab from PIL
    :: Linux : ligne de commande import

    Capture de la video ::
    :: multiplateforme : pymedia

    //// Remarques ::

    :: Pour la capture de l'image sous linux, on utilisera ImageMagick à la place (pour éviter de passer par la création des fichiers jpg), en espérant qu'imageMagick a des performances meilleures que Imagegrab parce que j'arrive à un max de 10fps sur un intel core2duo E6750 @ 2go ddr2, ca promet pour les pc un peu plus lents!

    :: Pour la video, la libraire pymedia est relativement vieille donc on devrait migrer vers qqch venant de pygame plutot. (qui est encore relativement bien à jour) De plus la video prends encore trp de place actuellement (5 Mo pour 1 minute à 1fps)

    //// A faire ::
    :: capture la souris (invisible pour le moment)
    :: envoyer les mpeg à un module xvid plutot que stocker les mpegs directement à mkvmerge (matroska).
    :: mettre imageMagick pour la version linux
    :: utiliser pygame plutot que pymedia

    PS: J'ai essayé d'installer PythonMagick et j'ai eu quelques soucis... Voici mon message d'erreur :
    /usr/include/boost/python/converter/registered.hpp:88: error: no matching function for call to 'registry_lookup(const volatile void (*)())'

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Par défaut
    Bonjour arfnitro,

    Ou en est l'avancement de ton projet ? As-tu toujours besoin d'une solution pour faire des capture d'écran multiplateformes ?

    Pour les besoin d'un projet que je développe j'ai aussi eu le même besoin, et j'ai trouvé une solution consistant à utiliser la librarie GTK avec wxGTK. Par contre, je ne sais pas si les performances seront suffisantes pour ton cas puisque tu auras besoin de prendre au moins 25 images par seconde pour que cela soit fluide.

    Si tu veux un exemple du code, regarde dans la source du-dit projet, Panic Button. Attention, seules les versions a partir de 1.7 ont ce code, puisqu'auparavant l'application ne fonctionnait que sur Windows.

Discussions similaires

  1. Empécher les captures d'écran
    Par alix the webmasta dans le forum Autres langages pour le Web
    Réponses: 10
    Dernier message: 17/02/2006, 00h24
  2. [VB.NET] Capture d'écran
    Par tiboooo dans le forum Windows Forms
    Réponses: 8
    Dernier message: 03/01/2006, 18h23
  3. Pb capture d'écran et msgbox
    Par PRACH dans le forum VB 6 et antérieur
    Réponses: 12
    Dernier message: 03/01/2006, 09h38
  4. Capture d'écran
    Par lildan dans le forum MFC
    Réponses: 1
    Dernier message: 14/11/2005, 14h26
  5. Réponses: 10
    Dernier message: 10/10/2003, 14h25

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