Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 能否从位图中获取设备上下文?_Python_Winapi_Pywin32 - Fatal编程技术网

Python 能否从位图中获取设备上下文?

Python 能否从位图中获取设备上下文?,python,winapi,pywin32,Python,Winapi,Pywin32,我正在尝试在将图像转换为位图后调整图像大小。从MSDN示例中,我能够了解如何从DC调整大小(在它转换为位图之前) 我的问题是,如果我已经有一个位图对象,我将如何从它创建一个DC,以便将它传递给StretchBlt方法 设备上下文的全部意义在于它是一个适合于某种设备的上下文,比如显示器、打印机等等。因此,为位图创建DC没有任何意义。阅读更多细节 如果要创建与当前屏幕兼容的内存中设备上下文,这正是使用NULL(来自Python,None或0作为hdc参数调用时得到的: 现有DC的句柄。如果此句柄为N

我正在尝试在将图像转换为位图后调整图像大小。从
MSDN
示例中,我能够了解如何从DC调整大小(在它转换为位图之前)


我的问题是,如果我已经有一个位图对象,我将如何从它创建一个DC,以便将它传递给
StretchBlt
方法

设备上下文的全部意义在于它是一个适合于某种设备的上下文,比如显示器、打印机等等。因此,为位图创建DC没有任何意义。阅读更多细节

如果要创建与当前屏幕兼容的内存中设备上下文,这正是使用
NULL
(来自Python,
None
0
作为
hdc
参数调用时得到的:

现有DC的句柄。如果此句柄为NULL,则函数将创建与应用程序当前屏幕兼容的内存DC

然而,在您的情况下,您最终会尝试将其快速导入到您已经拥有DC的目标窗口(或其他目标),对吗?所以我认为您真正想要的是创建一个与目标DC兼容的内存DC,然后创建一个与该目标DC兼容的位图,然后将该位图选择到内存DC中

# Big snapshot of the desktop
hwnd = win32gui.GetDesktopWindow()

zhwndDevice = win32gui.GetWindowDC(hwnd)
zmfcDC  = win32ui.CreateDCFromHandle(zhwndDevice)
zsaveDC = zmfcDC.CreateCompatibleDC()
zsaveBitMap = win32ui.CreateBitmap()
zsaveBitMap.CreateCompatibleBitmap(zmfcDC, width, height)
zsaveDC.SelectObject(zsaveBitMap)
zsaveDC.BitBlt((0, 0), (width, height), zmfcDC, (left, top), win32con.SRCCOPY)

# Creates a smaller bitmap and resizes the first image to fit it 
hwnd = win32gui.GetDesktopWindow()
hwndDevice = win32gui.GetWindowDC(hwnd)
mfcDC   = win32ui.CreateDCFromHandle(hwndDevice)
saveDC = mfcDC.CreateCompatibleDC()
saveBitMap = win32ui.CreateBitmap()
saveBitMap.CreateCompatibleBitmap(mfcDC, target_size[0], target_size[1])
saveDC.SelectObject(saveBitMap)
win32gui.StretchBlt(pywintypes.HANDLE(saveDC.GetHandleAttrib()), 0,0,target_size[0], target_size[1], zsaveDC.GetHandleAttrib(), 0,0,width, height, win32con.SRCCOPY)