将位图数据保存到文件

时间:2012-02-05 16:02:29

标签: python winapi screenshot ctypes

我正在尝试仅使用ctypes来截取python。

我在bitblt后卡住了。 有没有人有一个代码将位图对象保存到python中的ctypes文件?

这是我到目前为止写的代码:

import ctypes    
from ctypes import *    

   #Constants   
   SM_CXSCREEN = 0   
    SM_CYSCREEN = 1        
    SRCCOPY = 0xCC0020         
    user32 = ctypes.windll.user32       
    gdi32 = ctypes.windll.gdi32    


class BITMAPINFOHEADER(ctypes.Structure):    
    _fields_ = [    
        ('biSize', ctypes.c_uint32),        
        ('biWidth', ctypes.c_int),    
        ('biHeight', ctypes.c_int),    
        ('biPlanes', ctypes.c_short),    
        ('biBitCount', ctypes.c_short),    
        ('biCompression', ctypes.c_uint32),    
        ('biSizeImage', ctypes.c_uint32),    
        ('biXPelsPerMeter', ctypes.c_long),    
        ('biYPelsPerMeter', ctypes.c_long),    
        ('biClrUsed', ctypes.c_uint32),    
        ('biClrImportant', ctypes.c_uint32)    
    ]    



class BITMAPINFO(ctypes.Structure):    
    _fields_ = [    
        ('bmiHeader', BITMAPINFOHEADER),    
        ('bmiColors', ctypes.c_ulong * 3)    
    ]    


hDesktopWnd = user32.GetDesktopWindow()    
WinDC = user32.GetDC (hDesktopWnd)    
CopyDC = gdi32.CreateCompatibleDC (WinDC)    
hBitmap = gdi32.CreateCompatibleBitmap (WinDC,  1000, 1000)    
gdi32.SelectObject (CopyDC, hBitmap)    
gdi32.BitBlt(CopyDC,   0,0, 1000,   1000,   WinDC,  0, 0,   SRCCOPY);    

我知道下一步将是:

lpbi = BITMAPINFO()    
ctypes.memset(ctypes.byref(lpbi), 0x00, ctypes.sizeof(lpbi))    
lpbi.bmiHeader.biSize = ctypes.sizeof(BITMAPINFOHEADER)    
gdi32.SelectObject (CopyDC, hBitmap)    

...    

但是它很糟糕而且没有用。 请帮忙。

0 个答案:

没有答案