我正在使用Apple网站(Xcode项目)中的AVScreenShack示例,该示例捕获桌面并在准实时窗口中显示捕获。
我稍微修改了项目并插入了这行代码:
-(void)captureOutput:(AVCaptureOutput*) captureOutput didOutputSampleBuffer:(CMSampleBufferRef) sampleBuffer fromConnection:(AVCaptureConnection*) connection
{
...
}
我的问题是:如何将CMSampleBufferRef实例转换为CGImageRef?
谢谢。
答案 0 :(得分:2)
以下是如何从CMSampleBufferRef创建UIImage。在captureStillImageAsynchronouslyFromConnection:completionHandler:
上回复AVCaptureStillImageOutput
时,这对我有用。
// CMSampleBufferRef imageDataSampleBuffer;
CMBlockBufferRef buff = CMSampleBufferGetDataBuffer(imageDataSampleBuffer);
size_t len = CMBlockBufferGetDataLength(buff);
char * data = NULL;
CMBlockBufferGetDataPointer(buff, 0, NULL, &len, &data);
NSData * d = [[NSData alloc] initWithBytes:data length:len];
UIImage * img = [[UIImage alloc] initWithData:d];
看起来CMBlockBufferGetDataPointer
的数据是JPEG数据。
更新:要完全回答您的问题,您可以从我的代码中致电CGImage
img
以实际获得CGImageRef
。