【发布时间】:2015-09-17 11:50:21
【问题描述】:
我需要从窗口获取原始 BRGA 数据。据我所知,这样做的常见原因是:
int bgraDataLen = 0;
CGImageRef windowImage = CGWindowListCreateImage(CGRectNull, kCGWindowListOptionIncludingWindow, windowId, kCGWindowImageBoundsIgnoreFraming);
CFDataRef bgraDataRef = CGDataProviderCopyData(CGImageGetDataProvider(windowImage));
bgraDataLen = CFDataGetLength(bgraDataRef);
*bgraData = new unsigned char[bgraDataLen]; //This is what I need
CFDataGetBytes(bgraDataRef, CFRangeMake(0, bgraDataLen), *bgraData);
CGImageRelease(windowImage);
CFRelease(bgraDataRef);
我对这个解决方案的问题是 CGDataProviderCopyData 会复制整个缓冲区。我想避免它,只需要一个指向原始数据的指针。而且我不介意它是只读的。有更好的方法吗?
【问题讨论】:
标签: c++ objective-c cocoa cgimage