Самый быстрый способ сделать скриншот окна - PullRequest
0 голосов
/ 11 сентября 2018
def take_screenshot(hwnd):

    left, top, right, bot = win32gui.GetClientRect(hwnd)
    #left, top, right, bot = win32gui.GetWindowRect(hwnd)
    width = right - left
    height  = bot - top

    wDC = win32gui.GetWindowDC(hwnd)
    dcObj=win32ui.CreateDCFromHandle(wDC)
    cDC=dcObj.CreateCompatibleDC()
    dataBitMap = win32ui.CreateBitmap()
    dataBitMap.CreateCompatibleBitmap(dcObj, width, height)
    cDC.SelectObject(dataBitMap)
    cDC.BitBlt((0, 0), (width, height), dcObj, (0, 0), win32con.SRCCOPY)
    im = dataBitMap.GetBitmapBits(True)
    img = np.frombuffer(im, dtype='uint8')
    img.shape = (height,width,4)
    cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
    dcObj.DeleteDC()
    cDC.DeleteDC()
    win32gui.ReleaseDC(hwnd, wDC)
    win32gui.DeleteObject(dataBitMap.GetHandle())
    return img[:,:,:3]

Я сейчас использую этот код. Есть ли способ сделать это быстрее = я хочу иметь возможность захватывать 1080 с 60 кадров в секунду в прямом эфире. Могу ли я использовать свой GPU для этой проблемы? У меня GTX 1070.

...