发送CGImageRef作为输出参数

时间:2015-11-03 13:44:45

标签: objective-c++ cgimageref

我需要抓住一个移动的窗口。因为窗口正在移动,我想在主线程中捕获它:

void MacRenderer::captureImageImpl(const CGRect& captureRect, const CGWindowID windowId, CGImageRef* img)
{
    *img = CGWindowListCreateImage(captureRect, kCGWindowListOptionIncludingWindow, windowId, kCGWindowImageBoundsIgnoreFraming);  //EXC_BAD_ACCESS
}

void MacRenderer::captureWindow(CGWindowID windowId, unsigned char** bgraData, int* width, int* height, int* bytesPerRow, NSRect captureRect)
{  
    CGImageRef* windowImage;

    dispatch_sync(dispatch_get_main_queue(), ^{
        captureImageImpl(captureCGRect, windowId, windowImage);
    });

    //Use windowImage ...
}

我在[{1}}的地址上收到EXC_BAD_ACCESS。为什么以及解决方案是什么?谢谢!

1 个答案:

答案 0 :(得分:0)

void MacRenderer::captureWindow(CGWindowID windowId, unsigned char** bgraData, int* width, int* height, int* bytesPerRow, NSRect captureRect)
{  
    __block CGImageRef windowImage;

    dispatch_sync(dispatch_get_main_queue(), ^{
        captureImageImpl(captureCGRect, windowId, &windowImage);
    });

    //Use windowImage ...
}