CIFilter / CIImage:BSXPCMessage收到错误消息:连接中断

时间:2015-08-07 00:07:53

标签: ios swift core-image cifilter ciimage

我正在开发基于“相机/照片”的应用程序。

应用程序启动(sideMenu):MainView是 NavigationCTRL 中的普通VC,带有摄像头按钮。
点击它就会推动一个新的VC 这个是正常的,但在里面,有这些东西:

let captureSession: AVCaptureSession = AVCaptureSession()
var currentCaptureDevice: AVCaptureDevice?
var deviceInput: AVCaptureDeviceInput?
var stillCameraOutput: AVCaptureStillImageOutput?
var previewLayer: AVCaptureVideoPreviewLayer?

所以这是一个自定义的摄像机视图控制器 我可以 - 这样 - 有更好的用户体验 然后我可以拍照(从图书馆,或点击拍摄按钮(打开/关闭一些功能后[计时器,高清,闪光..]。

当它拍照时,我使用 prepareForSegue 方法将捕获的图像发送到下一个VC:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == Constants.Segues.CameraToFiltersSegue {
        var filterVC = segue.destinationViewController as! MYCLASSVC
        filterVC.originalImage = pictureImage
    }
}

然后,它推动了新的VC和...
我收到了这条消息: BSXPCMessage收到错误消息:连接中断

当前VC包含:

  • 一个imageView(UIImageView):上一张图片
  • 小型收藏视图,其中包含原始的小型(缩略图)滤镜图片( CIFilter

此视图中没有更多内容。但我有这个消息 这条消息怎么样?
我应该以不同的方式做点什么吗?

这就是我设置过滤器的方法:

//At the top of the class
//EAGLRenderingAPI.OpenGLES2 but maybe EAGLRenderingAPI.OpenGLES3??
static let contextFast = CIContext(EAGLContext: EAGLContext(API: EAGLRenderingAPI.OpenGLES2), options: [kCIContextWorkingColorSpace: NSNull(), kCIContextUseSoftwareRenderer: false])

//In my static method (one of the parameter is "originalImage")
var ciimage: CIImage = CIImage(image: originalImage)
var imageFilter = CIFilter(name: "CIPhotoEffectInstant")
filter.setValue(ciimage, forKey: kCIInputImageKey)
let cgimg = contextFast.createCGImage(imageFilter.outputImage, fromRect: imageFilter.outputImage.extent())
return UIImage(CGImage: cgimg, scale: 1.0, orientation: image.imageOrientation)

此代码运行速度快! 我不知道消息来自哪里。

所以,如果您有任何想法或其他更多信息可以帮助吗?

1 个答案:

答案 0 :(得分:2)

如果我在下一行之前返回nil,我从未收到消息。

let cgimg = contextFast.createCGImage(filter.outputImage, fromRect: filter.outputImage.extent())

如果我将软件渲染器选项的正常上下文用于“true”:

let context = CIContext(options: [kCIContextUseSoftwareRenderer: true])

消息消失。 我试着把这个选项放到我最后的fastContext中,但没有任何改变 所以它来自使用的上下文,但是在正常的上下文中,渲染的是x5更长(可能更长)。在快速上下文中,我的collectionView中从来没有变慢。我甚至没有看到重新加载数据 但是在正常的背景下,它是可见的。

在基本的相机/照片应用程序中,Apple也有同样的事情。图片和collectionView与原始图片的缩略图,但过滤了!他们是怎么做到的?我们甚至看不到加载的物品。