【发布时间】:2017-09-29 21:48:27
【问题描述】:
我有一个奇怪的问题,从我的照片库中裁剪照片后,它无法从应用程序中显示。运行此代码后,它给了我这个错误:
self.correctedImageView.image = UIImage(ciImage: correctedImage)[api] -[CIContext(CIRenderDestination) _startTaskToRender:toDestination:forPrepareRender:error:] 图像范围和目标范围不相交。
这是我用来裁剪和显示的代码。 (inputImage 为 CIImage)
let imageSize = inputImage.extent.size let correctedImage = inputImage .cropped(to: textObvBox.boundingBox.scaled(to: imageSize) ) DispatchQueue.main.async { self.correctedImageView.image = UIImage(ciImage: correctedImage) }
更多信息:调试打印输入图像和校正图像的范围
self.inputImage的打印说明:CIImage: 0x1c42047a0 extent [0 0 3024 4032]>
作物 [430 3955 31 32] 范围=[430 3955 31 32] 仿射 [0 -1 1 0 0 4032] 范围=[0 0 3024 4032] 不透明 仿射 [1 0 0 -1 0 3024] 范围=[0 0 4032 3024] 不透明 颜色匹配“sRGB IEC61966-2.1”_to_workingspace 范围=[0 0 4032 3024] 不透明 IOSurface 0x1c4204790(501) 种子:1 YCC420f 601 alpha_one extent=[0 0 4032 3024] 不透明
有趣的是,当我使用 Xcode 放置断点时,我能够正确预览裁剪后的图像。我不确定 CIImage 的这个范围是什么,但是当我将裁剪的图像分配给它时,UIImageView 不喜欢它。知道这个 extent 的作用是什么吗?
【问题讨论】:
-
CoreImage 在无限平面上运行。范围是该平面中实际包含您关心的图像数据的矩形。
-
如何更改范围??
-
当我将它应用到 uiimageview 时它不会让我
-
我不确定我是否与@KevinBallard 完全相同,但我创建了一个
CIContext- 小心,这些很昂贵(阅读:创建一个需要处理时间),尝试做它一次并用于所有事情 - 然后我使用CIContext.createCGImage(CIImage, from: CIExtent),最后是UIImage(cgImage:)。我选择这种方法是因为我使用GLKView(使用GPU)而不是UIImageView(使用CPU)将内容渲染到屏幕上。GLKView不仅不需要UIImage,还存在一个正确编码的CIContext。 -
我重用了裁剪图像后给出的范围
标签: ios core-graphics core-image