1

我正在使用 Apple 网站(Xcode 项目)中的 AVScreenShack 示例,该示例捕获桌面并在准实时的窗口中显示捕获。

我稍微修改了项目并插入了这行代码:

-(void)captureOutput:(AVCaptureOutput*) captureOutput didOutputSampleBuffer:(CMSampleBufferRef) sampleBuffer fromConnection:(AVCaptureConnection*) connection
{
 ...
}

我的问题是:如何将 CMSampleBufferRef 实例转换为 CGImageRef ?

谢谢你。

4

1 回答 1

2

以下是如何从 CMSampleBufferRef 创建 UIImage。这在回复captureStillImageAsynchronouslyFromConnection:completionHandler:on时对我有用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数据。

更新:要完全回答您的问题,您可以从我的代码中调用CGImageimg实际获取CGImageRef.

于 2013-10-14T04:22:31.990 回答