Как я могу сделать снимок экрана конкретного окна приложения c на Ma c OSX, используя python? - PullRequest
0 голосов
/ 05 мая 2020

Функция, которую я хочу реализовать, аналогична window capture в OBS Studio. Рабочий процесс моих попыток:

  1. Перечислить имя и идентификатор windows ';
  2. Использование библиотек PyObjC и Quartz для создания изображения.

Ниже мой код python:

import Quartz
import Quartz.CoreGraphics as CG

def capture_window(target_winname):
    windows = Quartz.CGWindowListCopyWindowInfo(Quartz.kCGWindowListOptionOnScreenOnly | 
                     Quartz.kCGWindowListExcludeDesktopElements, Quartz.kCGNullWindowID)

    for win in windows:
        if win['kCGWindowName'] == target_winname:
            ## parameter predefine ##
            win_bound = win['kCGWindowBounds']
            win_size = CG.CGSize()
            win_size.width = win_bound['Width']
            win_size.height = win_bound['Height']
            win_pt = CG.CGPoint(win_bound['X'], win_bound['Y'])
            win_rect = CG.CGRect(win_pt, win_size)
            win_id = win['kCGWindowNumber']
            ## create image ##
            image = CG.CGWindowListCreateImage(win_rect,
                       CG.kCGWindowListOptionOnScreenOnly,
                       win_id, CG.kCGWindowImageDefault)

            prov = CG.CGImageGetDataProvider(image)
            cvImg.data = CG.CGDataProviderCopyData(prov)
            cvImg.width = CG.CGImageGetWidth(image)
            cvImg.height = CG.CGImageGetHeight(image)
            return cvImg
    return None

К сожалению, данные выходного изображения неверны (всегда отображается текущее переднее окно), хотя размер прямоугольника в соответствии с целевым окном. Что я должен делать дальше? Спасибо.

...