msk*_*skw 4 core-graphics core-image ios
我有一个奇怪的问题,从我的照片库中裁剪照片后,它无法从应用程序显示.运行此代码后,它给出了这个错误:
Run Code Online (Sandbox Code Playgroud)self.correctedImageView.image = UIImage(ciImage: correctedImage)[api] - [CIContext(CIRenderDestination)_startTaskToRender:toDestination:forPrepareRender:error:]图像范围和目标范围不相交.
这是我用于裁剪和显示的代码.(inputImage是CIImage)
Run Code Online (Sandbox Code Playgroud)let imageSize = inputImage.extent.size let correctedImage = inputImage .cropped(to: textObvBox.boundingBox.scaled(to: imageSize) ) DispatchQueue.main.async { self.correctedImageView.image = UIImage(ciImage: correctedImage) }
更多信息:Debug打印inputImage和correctedImage的范围
打印self.inputImage的描述:CIImage:0x1c42047a0 extent [0 0 3024 4032]>
crop [430 3955 31 32] extent = [430 3955 31 32] affine [0 -1 1 0 0 4032] extent = [0 0 3024 4032] opaque affine [1 0 0 -1 0 3024] extent = [0 0 4032 3024] opaque colormatch"sRGB IEC61966-2.1"_to_workingspace extent = [0 0 4032 3024] opaque IOSurface 0x1c4204790(501)seed:1 YCC420f 601 alpha_one extent = [0 0 4032 3024] opaque
有趣的是,当我使用Xcode设置断点时,我能够正确预览裁剪后的图像.我不确定CIImage的这个范围是什么,但是当我将裁剪后的图像分配给它时,UIMageView不喜欢它.知道这个程度的东西有什么用吗?
我遇到了你描述的同样问题.由于UIKit/CoreImage中的一些奇怪的行为,我需要将其转换CIImage为CGImage第一个.我注意到它只发生在我应用了一些过滤器时CIImage,如下所述.
let image = /* my CIImage */
let goodImage = UIImage(ciImage: image)
uiImageView.image = goodImage // works great!
let image = /* my CIImage after applying 5-10 filters */
let badImage = UIImage(ciImage: image)
uiImageView.image = badImage // empty view!
Run Code Online (Sandbox Code Playgroud)
这就是我解决它的方式.
let ciContext = CIContext()
let cgImage = self.ciContext.createCGImage(image, from: image.extent)
uiImageView.image = UIImage(cgImage: cgImage) // works great!!!
Run Code Online (Sandbox Code Playgroud)
正如其他评论者所说,要注意创造一个CIContext太频繁; 这是一项昂贵的操作.
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |