方式一
- (UIImage *)imageFromSampleBuffer:(CMSampleBufferRef)sampleBuffer {
CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:imageBuffer];
CIContext *temporaryContext = [CIContext contextWithOptions:nil];
CGImageRef videoImage = [temporaryContext createCGImage:ciImage fromRect:CGRectMake(0, 0, CVPixelBufferGetWidth(imageBuffer), CVPixelBufferGetHeight(imageBuffer))];
UIImage *image = [[UIImage alloc] initWithCGImage:videoImage];
CGImageRelease(videoImage);
return image;
}
方式二
- (UIImage*)pixelBufferToImage:(CVPixelBufferRef) pixelBuffer{
CIImage *coreImage = [CIImage imageWithCVPixelBuffer:pixelBuffer];
CIContext *context = [CIContext contextWithOptions:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:kCIContextUseSoftwareRenderer]];//CPU渲染
CGImageRef cgimg = [context createCGImage:coreImage fromRect:[coreImage extent]];
UIImage* image = [UIImage imageWithCGImage:cgimg];
CFRelease(cgimg);
return image;
}
方式三
- (UIImage *)imageFromSampleBuffer:(CMSampleBufferRef)sampleBuffer {
CVPixelBufferRef bufferRef = CMSampleBufferGetImageBuffer(sampleBuffer);
if (!bufferRef) {
return;
}
UIImage *img = [UIImage imageWithCIImage:[CIImage imageWithCVImageBuffer:bufferRef]];
return img;
}
參考文章:http://www.reibang.com/p/4b4d44c6be1d
https://zhuanlan.zhihu.com/p/24762605
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者