首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从CMSampleBuffer捕获UIImage (swift 3)

从CMSampleBuffer捕获UIImage (swift 3)
EN

Stack Overflow用户
提问于 2016-12-09 02:52:15
回答 2查看 1.4K关注 0票数 0

我尝试从CMSampleBuffer捕获一个UIImage来读取文本。但是我总是得到这样的错误:

代码语言:javascript
复制
fatal error: unexpectedly found nil while unwrapping an Optional value

我环顾四周,尝试了很多版本。但我总是得到相同的错误。

代码语言:javascript
复制
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) {

        let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
        let image = CIImage(cvPixelBuffer: pixelBuffer!)
            let uiImage = UIImage(cgImage: image.cgImage!)
}

致以亲切的问候!

EN

回答 2

Stack Overflow用户

发布于 2016-12-09 06:31:34

仅当从CGImage创建CIImage时,CIImage.cgImage才适用。当您从像素缓冲区创建CIImage时,它没有基础CGImage,因此该属性为nil。

您可以使用initialize a UIImage direct from a CIImage,但它的工作方式将取决于渲染图像的位置/方式。(例如,在UIImageView中呈现CI支持的UIImage在iOS 9和更早版本中的性能很差,如果您是实时执行的话。)

票数 1
EN

Stack Overflow用户

发布于 2016-12-11 04:03:49

要通过CIImage获取UIImage,您应该使用CIContext。下面的是Obj-C代码:

代码语言:javascript
复制
CIContext *context = [CIContext contextWithOptions:nil];

然后:

代码语言:javascript
复制
CGImageRef cgImage = [context createCGImage:yourCIImage fromRect:[yourCIImage extent] ];
UIImage *resultUIImage = [UIImage imageWithCGImage:cgImage scale:1.0 orientation:UIImageOrientationUp];

这种方法声称它只使用GPU,因此速度很快。但是还有其他方法可以从CVPixelBuffer,获取UIImage,比如使用CGContextRef

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41046770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档