我正在尝试研究如何在之后调整图像我将其转换为位图。从MSDN
示例中,我能够弄清楚如何从 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)
我的问题是,如果我已经有一个Bitmap对象,我将如何从中创建一个DC,以便我可以将它传递给StretchBlt
方法?
答案 0 :(得分:2)
设备上下文的重点在于它是适用于某种设备的上下文 - 您的显示器,打印机等等。因此,为位图创建DC没有任何意义。请阅读Device Contexts了解更多详情。
如果您想创建一个与当前屏幕兼容的内存设备上下文,这正是您使用NULL
(来自Python,None
或{调用CreateCompatibleDC
时获得的内容{1}},取决于您使用的包装器)作为0
参数:
现有DC的句柄。如果此句柄为NULL,则该函数将创建与应用程序当前屏幕兼容的内存DC。
然而,在你的情况下,你最终试图把它搞定到你已经拥有DC的目标窗口(或其他一些目标),对吧?所以我认为你真正想要的是创建一个与 target DC兼容的内存DC,然后创建一个与该目标DC兼容的位图,然后将该位图选择到内存DC中。