swift 将UI图像转换为CI图像,然后再转换回UI图像会导致白色/空白显示

zd287kbt  于 2022-12-28  发布在  Swift
关注(0)|答案(1)|浏览(208)

我可以显示我加载的UIImage,但当我将其转换为CIimage并返回时,它无法正确显示。

struct ContentView: View {
    @State var stateString = "abc";
    @State var stateImage = UIImage(named: "Lenna")
    
    var body: some View {
        VStack {
            Image(uiImage: stateImage!)
            Text(stateString)
        }
        .padding()
        .onAppear(){
            guard let uiimage = UIImage(named: "Lenna") else {return};
            guard let ciimage = CIImage(image: uiimage) else {return};
            
            stateString = "past guard"
            stateImage = UIImage(ciImage: ciimage);
        }
    }
}
wqnecbli

wqnecbli1#

就像马特在评论中说的,这有点傻。你这么做只是作为一种学习练习吗?
我已经将UIImages转换为CIImage,对它们应用了核心图像滤镜,然后将它们转换回UIImage(或者更确切地说,从CIImage转换为CGImage,再转换为UIImage)。
UIImage由CGImage支持,如果你有一个UIImage,你可以用UIImage的属性来支持CGImage。你也可以很容易地从CGImage创建一个UIImage
CIImage由Core Image使用,它是跨平台的。它与CGImage交互,而不是与UIImage交互。您需要从UIImage转换为CGImage,然后从CGImage转换为CIImage
CIImage有一个初始化器,它接受CGImage作为输入:

init(cgImage image: CGImage)

this link中,有一个函数可以将CIImage转换回CGImage
该函数(来自链接,而不是我的代码)如下所示:

func convertCIImageToCGImage(inputImage: CIImage) -> CGImage? {
    let context = CIContext(options: nil)
    if let cgImage = context.createCGImage(inputImage, from: inputImage.extent) {
        return cgImage
    }
    return nil
}

相关问题