从函数获取 UIImage
Get UIImage from function
我编写了一个将滤镜应用于照片的函数。为什么函数总是 returns nil?
func getImage() -> UIImage? {
let openGLContext = EAGLContext(api: .openGLES2)
let context = CIContext(eaglContext: openGLContext!)
let coreImage = UIImage(cgImage: image.cgImage!)
filter.setValue(coreImage, forKey: kCIInputImageKey)
filter.setValue(1, forKey: kCIInputContrastKey)
if let outputImage = filter.value(forKey: kCIOutputImageKey) as? CIImage {
let output = context.createCGImage(outputImage, from: outputImage.extent)
return UIImage(cgImage: output!)
}
return nil
}
在这种情况下,您永远不会输入 if。也许 filter.value returns nil 或者它不是 CIImage 它 returns。像那样提取它并在 if 处设置断点或在之间添加打印:
let value = filter.value(forKey: kCIOutputImageKey)
if let outputImage = value as? CIImage {
let output = context.createCGImage(outputImage, from: outputImage.extent)
return UIImage(cgImage: output!)
}
如果您需要更多信息,您必须共享过滤器定义和使用代码。
当您在 iOS
中使用 coreImage
时。您必须考虑 coreImage 类 例如 CIFilter, CIContext, CIVector, and CIColor 并且输入图像应该是 CIImage
它保存图像数据。它可以从 UIImage 创建。
注意:你没有提到你的过滤器定义或自定义过滤器,你 using.From 你的代码,我可以看到你试图改变 contrast
输入 image.So,我正在使用 CIColorControls
过滤器测试代码以调整对比度。
func getImage(inputImage: UIImage) -> UIImage? {
let openGLContext = EAGLContext(api: .openGLES2)
let context = CIContext(eaglContext: openGLContext!)
let filter = CIFilter(name: "CIColorControls")
let coreImage = CIImage(image: filterImage.image!)
filter?.setValue(coreImage, forKey: kCIInputImageKey)
filter?.setValue(5, forKey: kCIInputContrastKey)
if let outputImage = filter?.value(forKey: kCIOutputImageKey) as? CIImage {
let output = context.createCGImage(outputImage, from: outputImage.extent)
return UIImage(cgImage: output!)
}
return nil
}
你可以像下面这样调用上面的函数。
filterImage.image = getImage(inputImage: filterImage.image!)
输出:
我编写了一个将滤镜应用于照片的函数。为什么函数总是 returns nil?
func getImage() -> UIImage? {
let openGLContext = EAGLContext(api: .openGLES2)
let context = CIContext(eaglContext: openGLContext!)
let coreImage = UIImage(cgImage: image.cgImage!)
filter.setValue(coreImage, forKey: kCIInputImageKey)
filter.setValue(1, forKey: kCIInputContrastKey)
if let outputImage = filter.value(forKey: kCIOutputImageKey) as? CIImage {
let output = context.createCGImage(outputImage, from: outputImage.extent)
return UIImage(cgImage: output!)
}
return nil
}
在这种情况下,您永远不会输入 if。也许 filter.value returns nil 或者它不是 CIImage 它 returns。像那样提取它并在 if 处设置断点或在之间添加打印:
let value = filter.value(forKey: kCIOutputImageKey)
if let outputImage = value as? CIImage {
let output = context.createCGImage(outputImage, from: outputImage.extent)
return UIImage(cgImage: output!)
}
如果您需要更多信息,您必须共享过滤器定义和使用代码。
当您在 iOS
中使用 coreImage
时。您必须考虑 coreImage 类 例如 CIFilter, CIContext, CIVector, and CIColor 并且输入图像应该是 CIImage
它保存图像数据。它可以从 UIImage 创建。
注意:你没有提到你的过滤器定义或自定义过滤器,你 using.From 你的代码,我可以看到你试图改变 contrast
输入 image.So,我正在使用 CIColorControls
过滤器测试代码以调整对比度。
func getImage(inputImage: UIImage) -> UIImage? {
let openGLContext = EAGLContext(api: .openGLES2)
let context = CIContext(eaglContext: openGLContext!)
let filter = CIFilter(name: "CIColorControls")
let coreImage = CIImage(image: filterImage.image!)
filter?.setValue(coreImage, forKey: kCIInputImageKey)
filter?.setValue(5, forKey: kCIInputContrastKey)
if let outputImage = filter?.value(forKey: kCIOutputImageKey) as? CIImage {
let output = context.createCGImage(outputImage, from: outputImage.extent)
return UIImage(cgImage: output!)
}
return nil
}
你可以像下面这样调用上面的函数。
filterImage.image = getImage(inputImage: filterImage.image!)
输出: