ios - CIFilter/CI图像 : BSXPCMessage received error for message: Connection interrupted

标签 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?

所以这是一个自定义相机 View Controller 。
我可以 - 通过这种方式 - 获得更好的用户体验。
然后我可以拍照(从图库中,或通过点击拍摄按钮(在打开/关闭某些功能 [定时器、高清、闪光灯..] 之后)。

当它拍照时,我使用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 AND...
我收到此消息:BSXPCMessage 收到消息错误:连接中断

当前VC包含:

  • 一个imageView(UIImageView):上一张图片
  • 一个小型 Collection View ,其中包含来自原始 (CIFilter) 的小型(缩略图)过滤图片

此 View 中仅此而已。但是我有这个消息。
这条消息怎么样?
我应该以不同的方式做某事吗?

这是我设置过滤器的方式:

//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)

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

那么,如果您有任何想法或其他帮助,请问?

最佳答案

如果我在下一行之前返回 nil,我就永远不会收到消息。

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

如果我使用普通上下文并将软件渲染器选项设置为“true”:

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

消息消失。 我试图将此选项放入我的最后一个 fastContext 但没有任何改变。
所以它来自使用的上下文,但在正常上下文中,渲染的时间长了 x5(可能更多)。有了快速上下文,我的 collectionView 就再也不会慢了。我什至没有看到数据的重新加载。
但在正常上下文中,它是可见的。

在基本的相机/照片应用程序中,Apple 也有同样的东西。一张图片和一个带有原始图片缩略图但被过滤的collectionView!他们是怎么做到的?我们甚至看不到正在加载的项目。

关于ios - CIFilter/CI图像 : BSXPCMessage received error for message: Connection interrupted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31867699/

相关文章:

iOS Alamofire 超时且无网络连接

iphone - 如何在单行中管理多个标签但没有。表格 View 中的单元格取决于 iPhone SDK 中的数组。

ios - 批量地理编码 MKLocalSearch 响应

ios - iOS Swift 中手机号码的 CNContactPickerViewController 验证

ios - 如何设置/更改 CGImage 上的 alphaInfo?

ios - CIDetectorMinFeatureSize 和 CIDetectorAspectRatio 键如何用于 CIDetector?

ios - CIDetector featuresInImage 返回 0

ios - UICollectionView:删除单元格之间的空间(每行 7 个项目)

ios - CloudKit复合查询(OR查询)

ios - 仅从存在用户 UID 的节点获取特定的子值