Функция, которую я хочу реализовать, аналогична window capture
в OBS Studio. Рабочий процесс моих попыток:
- Перечислить имя и идентификатор windows ';
- Использование библиотек
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
К сожалению, данные выходного изображения неверны (всегда отображается текущее переднее окно), хотя размер прямоугольника в соответствии с целевым окном. Что я должен делать дальше? Спасибо.