2017-09-29 3 views
3

사진 라이브러리에서 사진을 자른 후에 앱에서 이미지를 표시 할 수없는 이상한 문제가 있습니다. 이 코드를 실행하면이 오류가 발생합니다.이상한 CoreImage 자르기 문제 여기에서 발생합니다

 self.correctedImageView.image = UIImage(ciImage: correctedImage) 

[api] -[CIContext(CIRenderDestination) _startTaskToRender:toDestination:forPrepareRender:error:] The image extent and destination extent do not intersect.

다음은 자르기 및 표시하는 데 사용한 코드입니다.

let imageSize = inputImage.extent.size 
    let correctedImage = inputImage 
     .cropped(to: textObvBox.boundingBox.scaled(to: imageSize)) 
    DispatchQueue.main.async { 
     self.correctedImageView.image = UIImage(ciImage: correctedImage) 
    } 

추가 정보 (inputImage는 CIImage입니다) : 디버그는 inputImage 및 correctedImage

의 범위를 인쇄

Printing description of 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

재미있는 것은 내가 엑스 코드를 사용하여 중단 점을 넣을 때, 내가 미리보기를 할 수 있었다이다 잘린 이미지. 이 범위의 것이 CIImage에 무엇인지는 모르겠지만 UIMageView는 자른 이미지를 할당 할 때 좋아하지 않습니다. 이 넓이가 무엇을하는 지 아는가?

+0

CoreImage는 무한 평면에서 작동합니다. 익스텐트는 해당 평면에서 실제로 관심있는 이미지 데이터가 포함 된 사각형입니다. –

+0

범위를 어떻게 변경합니까? – mskw

+0

내가 그것을 uiimageview에 적용하면 그것은 나를 허용하지 않을 것입니다. – mskw

답변

2

동일한 문제가 발생했습니다. 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! 

이것은 내가 어떻게 해결했는지입니다.

let ciContext = CIContext() 
let cgImage = self.ciContext.createCGImage(image, from: image.extent) 
uiImageView.image = UIImage(cgImage: cgImage) // works great!!! 

다른 댓글 작성 조심 언급 한 바와 같이 CIContext 너무 자주; 그 비싼 작업.