[ironpython] capture d'ecran sous windows.

Description

Voici une petite classe faites sous IronPython (pour ceux qui ne savent il s'agit d'une implémentation du langage Python dans le framework .Net de Microsoft). Ce qui permet d'utiliser .Net sous python et vice-versa.

Cette classe propose des méthodes de copie d'écran à travers les fonctionnalités de .Net 2.0
-Ecran principale
-Ecran virtuel
-Ecran N
-Aire de travail utilisateur
-Nombre d'écran existant

Les paramètres sur les méthodes:
n = Ecran X à capturer
f = Fichier de sortie de la capture
ff = Format de l'image de sortie (http://msdn2.microsoft.com/fr-fr/library/system.drawing.imaging.imageformat_members(VS.80).aspx)

Source / Exemple :


import clr

##Ajout des references des assembly au clr
clr.AddReference("System.Drawing")
clr.AddReference("System.Windows.Forms")

##Import assembly
from System.Drawing import *
from System.Windows.Forms import *

##Classe proposant des methodes de capture ecran
class ScreenShot(object):
    
    ##Constructeur
    def __init__(self):print "Init"

    ##Founit le nombre d'ecrans
    def GetNumberOfScreens(self):
        return Screen.AllScreens.Length
    
    ##Effectue une capture d'ecran de l'ecran principal
    def CapturePrimaryScreen(self,f,ff):
        ##Creer un objet Rectangle aux dimensions de l'ecran
        rect=Screen.PrimaryScreen.Bounds
        ##Creer un objet Bitmap
        bmp=Bitmap(rect.Width,rect.Height,Imaging.PixelFormat.Format32bppArgb)
        ##Creer un objet Graphic de notre objet Bitmap bmp
        g=Graphics.FromImage(bmp)
        ##Transfert le bloc des donnees des couleurs de l'ecran sur l'objet bmp
        g.CopyFromScreen(rect.Left,rect.Top,0,0,rect.Size,CopyPixelOperation.SourceCopy)
        ##Sauvegarde sur le disque notre objet bmp
        bmp.Save(f,ff)
        ##Libere les ressources utilisees
        bmp.Dispose()
        g.Dispose()

        return None
    
    ##Effectue une capture de l'ecran virtuel (tout ecran confondue)
    def CaptureVirtualScreen(self,f,ff):
        
        rect=SystemInformation.VirtualScreen
    
        bmp=Bitmap(rect.Width,rect.Height,Imaging.PixelFormat.Format32bppArgb)

        g=Graphics.FromImage(bmp)
        g.CopyFromScreen(rect.Left,rect.Top,0,0,rect.Size,CopyPixelOperation.SourceCopy)

        bmp.Save(f,ff)

        bmp.Dispose()
        g.Dispose()
        
        return None
    
    ##Effectue une capture d'un ecran particulien
    def CaptureFullScreen(self,n,f,ff):
        
        if(self.GetNumberOfScreens()>=n+1):
            
            scr=Screen.AllScreens[n]
            rect=scr.Bounds
            
            bmp=Bitmap(rect.Width,rect.Height,Imaging.PixelFormat.Format32bppArgb)
            
            g=Graphics.FromImage(bmp)
            g.CopyFromScreen(rect.Left,rect.Top,0,0,rect.Size,CopyPixelOperation.SourceCopy)
            
            bmp.Save(f,ff)
            
            bmp.Dispose()
            g.Dispose()
            
        else:
            return "Numero d'ecran incorrect"
            
        return None
            
    ##Effectue une capture de la zone de travail utilisateur
    def CaptureWorkingArea(self,f,ff):
        
        rect=Screen.PrimaryScreen.WorkingArea

        bmp=Bitmap(rect.Width,rect.Height,Imaging.PixelFormat.Format32bppArgb)

        g=Graphics.FromImage(bmp)
        g.CopyFromScreen(rect.Left,rect.Top,0,0,rect.Size,CopyPixelOperation.SourceCopy)

        bmp.Save(f,ff)

        bmp.Dispose()
        g.Dispose()
        
        return None

Conclusion :


Demo sous IronPython (ipy.exe)
Copier le fichier IronScreenshot.py à la racine du dossier ou vous avez IronPython

------------------------------------------

import clr
clr.AddReference("System.Drawing")

from System.Drawing import *

import IronScreenshot
from IronScreenshot import *

MyClass=ScreenShot()

MyClass.CapturePrimaryScreen("C:\\Primaire.bmp",Imaging.ImageFormat.Bmp)

MyClass.CaptureVirtualScreen("C:\\Virtuel.png",Imaging.ImageFormat.Png)

MyClass.CaptureWorkingArea("C:\\AireUtilisateur.gif",Imaging.ImageFormat.Gif)

MyClass.CaptureFullScreen(0,"C:\\Ecran1.jpg",Imaging.ImageFormat.Jpeg)

MyClass.CaptureFullScreen(1,"C:\\Ecran2.tiff",Imaging.ImageFormat.Tiff)

------------------------------------
(voir capture écran)

Bon dév à tous ;)

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.