我正在尝试仅使用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)
...
但是它很糟糕而且没有用。 请帮忙。