Lightroom的屏幕截图部分空白

时间:2019-11-10 08:48:13

标签: python opencv win32gui

我有一个代码,过去可以正常工作。它需要做的一件事是使用win32gui获取Adobe Lightroom的屏幕截图(如果有人感兴趣,我会制作错误的颜色覆盖图)。 最近停止工作,问题是lightroom屏幕截图中的图像部分现在为空白。 我必须说,我不知道pywin32,位图,句柄,屏幕截图,窗口以及所有这些如何工作,所以请保持柔和。我使用了在其他地方获得的部分代码,并通过反复试验找出了可运行的代码。如果您发现有什么时髦的事要告诉我,我会解决的。 我不太经常使用该代码,因此我不知道是什么导致了这种行为,但是我很确定这是一个lightroom更新。

下面是显示问题的代码。如果有人同时安装了python和adobe lightroom,则可以尝试一下。

有人可以解决吗?有可能: 1)修复win32gui以获取屏幕截图 2)建议使用其他模块,以进行正确的快照。

import win32gui
import win32ui
import win32con
import cv2
from time import sleep
import numpy as np


def _get_windows_bytitle(title_text, exact = False):
    def _window_callback(hwnd, all_windows):
        all_windows.append((hwnd, win32gui.GetWindowText(hwnd)))
    windows = []
    win32gui.EnumWindows(_window_callback, windows)
    if exact:
        return [hwnd for hwnd, title in windows if title_text == title]
    else:
        return [hwnd for hwnd, title in windows if title_text in title]



def take_screenshot1(hwnd):


    wDC = win32gui.GetWindowDC(hwnd)
    dcObj=win32ui.CreateDCFromHandle(wDC)
    cDC=dcObj.CreateCompatibleDC()
    dataBitMap = win32ui.CreateBitmap()
    dataBitMap.CreateCompatibleBitmap(dcObj, 1900, 1079)
    cDC.SelectObject(dataBitMap)
    cDC.BitBlt((0, 0), (1900, 1079), dcObj, (0, 0), win32con.SRCCOPY)

    im = dataBitMap.GetBitmapBits(False)

    img = np.array(im).astype(dtype="uint8")

    img.shape = (1079,1900,4)

    cv2.cvtColor(img, cv2.COLOR_RGB2BGR)

    dcObj.DeleteDC()
    cDC.DeleteDC()
    win32gui.ReleaseDC(hwnd, wDC)
    win32gui.DeleteObject(dataBitMap.GetHandle())
    return img

img = take_screenshot1(_get_windows_bytitle(title_text = 'Lightroom', exact = False)[0])
cv2.imshow('Test',img)
cv2.waitKey()
print ("Done")

0 个答案:

没有答案