【Swift】CIImage에서 UIImage로 변환하면 이미지가 표시되지 않음

4342 단어 CIImageSwiftUIImage
CIImage->UIImage로의 변환이 잘 되지 않았던 이야기.

환경



MacOS Big Sur 버전 11.4
Swift 5.4.2
Xcode 12.5.1

CoreImage를 사용하여 화상 가공을 하고 있었다



Swift 공부에서 CoreImage를 사용한 이미지를 필터링하는 앱을 제작했습니다.

CoreImage를 사용하려면 UIImage에서 CIImage를 만들 필요가있는 것 같습니다.
그리고 CIFilter 등으로 가공한 CIImage를 SwiftUI의 View내에서 표시하려면 UIImage로 변환할 필요가 있다.

여러가지 기사를 잡은 결과, UIImage에서 CIImage로의 변환은 다음의 2종류가 있는 것을 알았다.

example1.swift
let uiImage: UIImage = UIImage(ciImage: ciImage!)

example2.swift
let ciContext = CIContext(options: nil)
let outputCGImage: CGImage = ciContext.createCGImage((ciImage)!,
            from: (newCiImage?.extent)!)!
let uiImage = UIImage(cgImage: outputCGImage, scale: 0, orientation: uiImage.imageOrientation)

참고 : Core Image를 사용하여 iOS에서 이미지 필터 구현 (htps : // 이 m / 마코토 - 나가이 / ms / 21cb119d036b7db346)

CIImage->UIImage 변환이 작동하지 않음



우선, 상단의 UIImage→CIImage로 다이렉트로 변환하고 있는 코드가 심플하기 때문에 써 실행해 보면, 이미지가 전혀 표시되지 않게 되었다. 왜?

print로 데이터가 들어가 있는지 확인했지만 데이터는 제대로 들어가 있을 것 같다. 왜,,,? (여기서 1시간 정도 격투했다)

하단의 CIContext에서 CGImage를 경유해 UIImage로 변환하고 있는 코드라고 제대로 이미지가 표시되었습니다. 왜,,,?

CIImage는 이미지 자체가 아니라 "레시피"



이런 때는 공식 문서다!

Apple Developer의 공식 문서의 CIImage에 쓰여진 문장(을 일본어 번역한 것)은 이하와 같다.

CIImage 객체는 이미지 데이터가 연관되어 있지만 이미지가 아닙니다. CIImage 객체는 이미지의 "레시피"로 생각할 수 있습니다. CIImage 객체에는 이미지를 생성하는 데 필요한 모든 정보가 포함되어 있지만 Core Image는 지시될 때까지 실제로 이미지를 렌더링하지 않습니다. 이러한 지연 평가를 통해 Core Image는 가능한 한 효율적으로 작동합니다.
CIImage | Apple Developer Documentation : htps : //로 ゔぇぺぺr. 아 ぇ. 코 m / 도쿠 멘 타치 온 / 이것 속눈썹 / 시마게

즉,,,?
요리에 비유한다면, CIImage는 요리 자체가 아니라 요리를 수행하는 절차를 설명하는 쿡 패드와 같은 역할로, CIContext에서 CGImage로의 변환 단계는 절차에 따라 요리를 수행한다는 것입니까?
그리고 CGImage->UIImage는 요리를 보여주기 위해 접시에 담아 넣는 등의 이미지?

즉, UIImage(ciImage: ciImage!)로 이미지가 표시되지 않은 것은, 쿡 패드를 그대로 접시에 담으려고 했기 때문에 잘 되지 않았다고 하는 것이겠지요.

하지만 왜 CIImage->UIImage로 직접 변환할 수 있는 메서드가 제공되는지 몰랐습니다. 이 방법으로도 올바르게 움직이는 예가 있습니까?

결론



원래 작동하지 않았던 시점에서 CIContext에서의 방법으로 빨리 바꾸면 좋았습니다만, 결과적으로 UIImage와 CIImage, CGImage의 이해를 깊게 할 수 있었기 때문에 좋은 경험이 되었습니다.

또한 저자는 Swift에서의 프로그래밍 경험도 얕고 Qiita에서의 기사 쓰기도 처음이므로 끊임없는 점이 있을지도 모릅니다. 뭔가 문제가 있으면 의견을 부탁드립니다.
자신의 출력과 비망록을 위해 글을 썼습니다만, 이 기사가 누군가의 도움이 되었으면 좋겠습니다.

좋은 웹페이지 즐겨찾기