Как преобразовать вектор строки 1 столбца x в (900, 1600, 4)? - PullRequest
0 голосов
/ 01 апреля 2019

Я следую код, который захватывает экран на окнах и отображает его. Ссылка на код github: https://github.com/Sentdex/pygta5/blob/ac4132fed5970ce97f0267ecb76eb6bb095ef921/grabscreen.py

Когда я запускаю код, я получаю ошибку ValueError: невозможно преобразовать массив размером 1440000 в форму (900,1600,4)

Я знаю, что ошибка связана с несовместимостью размеров, но я не знаю, как ее исправить. Строка кода, которая меня смущает:

img.shape = (height, width, 4) # What is this line trying to do ?

P: S Извините, если формат вопроса не соответствует стандартам переполнения стека. Я все еще привыкаю к ​​этому.

# Done by Frannecklp

import cv2
import numpy as np
import win32gui, win32ui, win32con, win32api


def grab_screen(region=None):

    hwin = win32gui.GetDesktopWindow()

    if region:
            left,top,x2,y2 = region
            width = x2 - left + 1
            height = y2 - top + 1
    else:
        width = win32api.GetSystemMetrics(win32con.SM_CXVIRTUALSCREEN)
        height = win32api.GetSystemMetrics(win32con.SM_CYVIRTUALSCREEN)
        left = win32api.GetSystemMetrics(win32con.SM_XVIRTUALSCREEN)
        top = win32api.GetSystemMetrics(win32con.SM_YVIRTUALSCREEN)

    hwindc = win32gui.GetWindowDC(hwin)
    srcdc = win32ui.CreateDCFromHandle(hwindc)
    memdc = srcdc.CreateCompatibleDC()
    bmp = win32ui.CreateBitmap()
    bmp.CreateCompatibleBitmap(srcdc, width, height)
    memdc.SelectObject(bmp)
    memdc.BitBlt((0, 0), (width, height), srcdc, (left, top), win32con.SRCCOPY)

    signedIntsArray = bmp.GetBitmapBits(True)
    img = np.fromstring(signedIntsArray, dtype='uint8')
    img.shape = (height,width,4)

    srcdc.DeleteDC()
    memdc.DeleteDC()
    win32gui.ReleaseDC(hwin, hwindc)
    win32gui.DeleteObject(bmp.GetHandle())

    return cv2.cvtColor(img, cv2.COLOR_BGRA2RGB)
...