奇怪的CoreImage裁剪问题在这里遇到

msk*_*skw 4 core-graphics core-image ios

我有一个奇怪的问题,从我的照片库中裁剪照片后,它无法从应用程序显示.运行此代码后,它给出了这个错误:

        self.correctedImageView.image = UIImage(ciImage: correctedImage)  
Run Code Online (Sandbox Code Playgroud)

[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)  
    }
Run Code Online (Sandbox Code Playgroud)

更多信息: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不喜欢它.知道这个程度的东西有什么用吗?

72A*_*F4E 8

我遇到了你描述的同样问题.由于UIKit/CoreImage中的一些奇怪的行为,我需要将其转换CIImageCGImage第一个.我注意到它只发生在我应用了一些过滤器时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太频繁; 这是一项昂贵的操作.