# 
 | 
# The Python Imaging Library 
 | 
# $Id$ 
 | 
# 
 | 
# screen grabber (windows only) 
 | 
# 
 | 
# History: 
 | 
# 2001-04-26 fl  created 
 | 
# 2001-09-17 fl  use builtin driver, if present 
 | 
# 2002-11-19 fl  added grabclipboard support 
 | 
# 
 | 
# Copyright (c) 2001-2002 by Secret Labs AB 
 | 
# Copyright (c) 2001-2002 by Fredrik Lundh 
 | 
# 
 | 
# See the README file for information on usage and redistribution. 
 | 
# 
 | 
  
 | 
import Image 
 | 
  
 | 
## 
 | 
# (New in 1.1.3)  The <b>ImageGrab</b> module can be used to copy 
 | 
# the contents of the screen to a PIL image memory. 
 | 
# <p> 
 | 
# The current version works on Windows only.</p> 
 | 
# 
 | 
# @since 1.1.3 
 | 
## 
 | 
  
 | 
try: 
 | 
    # built-in driver (1.1.3 and later) 
 | 
    grabber = Image.core.grabscreen 
 | 
except AttributeError: 
 | 
    # stand-alone driver (pil plus) 
 | 
    import _grabscreen 
 | 
    grabber = _grabscreen.grab 
 | 
  
 | 
## 
 | 
# (New in 1.1.3) Take a snapshot of the screen.  The pixels inside the 
 | 
# bounding box are returned as an "RGB" image.  If the bounding box is 
 | 
# omitted, the entire screen is copied. 
 | 
# 
 | 
# @param bbox What region to copy.  Default is the entire screen. 
 | 
# @return An image 
 | 
# @since 1.1.3 
 | 
  
 | 
def grab(bbox=None): 
 | 
    size, data = grabber() 
 | 
    im = Image.fromstring( 
 | 
        "RGB", size, data, 
 | 
        # RGB, 32-bit line padding, origo in lower left corner 
 | 
        "raw", "BGR", (size[0]*3 + 3) & -4, -1 
 | 
        ) 
 | 
    if bbox: 
 | 
        im = im.crop(bbox) 
 | 
    return im 
 | 
  
 | 
## 
 | 
# (New in 1.1.4) Take a snapshot of the clipboard image, if any. 
 | 
# 
 | 
# @return An image, a list of filenames, or None if the clipboard does 
 | 
#     not contain image data or filenames.  Note that if a list is 
 | 
#     returned, the filenames may not represent image files. 
 | 
# @since 1.1.4 
 | 
  
 | 
def grabclipboard(): 
 | 
    debug = 0 # temporary interface 
 | 
    data = Image.core.grabclipboard(debug) 
 | 
    if Image.isStringType(data): 
 | 
        import BmpImagePlugin, StringIO 
 | 
        return BmpImagePlugin.DibImageFile(StringIO.StringIO(data)) 
 | 
    return data 
 |