【问题标题】:Swift playground - cannot convert a filtered UIImage to a CGImageSwift Playground - 无法将过滤后的 UIImage 转换为 CGImage
【发布时间】:2016-08-26 16:53:20
【问题描述】:

在 Swift Playground 中,我正在加载 JPEG,将其转换为 UIImage 并将其过滤为单色。 然后我将生成的过滤图像转换为 UIImage。

输入和过滤后的图像正确显示。

然后我将两个图像都转换为 CGImage 类型。 这适用于输入图像,但过滤后的图像从转换中返回 nil:

// Get an input image
let imageFilename = "yosemite.jpg"
let inputImage = UIImage(named: imageFilename )
let inputCIImage = CIImage(image:inputImage!)

// Filter the input image - make it monochrome
let filter = CIFilter(name: "CIPhotoEffectMono")
filter!.setDefaults()
filter!.setValue(inputCIImage, forKey: kCIInputImageKey)
let CIout = filter!.outputImage
let filteredImage = UIImage(CIImage: CIout!)        

// Convert the input image to a CGImage
let inputCGImageRef = inputImage!.CGImage           // Result: <CGImage 0x7fdd095023d0>
// THE LINE ABOVE WORKS

// Try to convert the filtered image to a CGImage
let filteredCGImageRef = filteredImage.CGImage      // Result: nil
// THE LINE ABOVE DOES NOT WORK
// Note that the compiler objects to 'filteredImage!.CGImage'

怎么了?

【问题讨论】:

  • @BryanChen - 这是同样的问题,但这是一个 Objective C 解决方案。
  • 这就是为什么我没有关闭投票你的问题。但是该链接确实回答了您为什么 CGImage 为零。

标签: swift uiimage cgimage ciimage


【解决方案1】:

您已经完成从CIImage 创建的UIImage 不受CGImage 的支持。您需要明确创建一个:

let context = CIContext()
let filteredCGImageRef = context.createCGImage(
    CIout!, 
    fromRect: CIout!.extent)

如果您需要UIImage,请从CIContext 呈现的CGImage 创建它:

UIImage(CGImage: filteredCGImageRef)

干杯,

西蒙

【讨论】:

  • 完美——正是我所需要的。
  • 我的 CIFiltered UIImage 在使用 .cgImage 将其转换为 cgImage 时返回 nil 时遇到了与 Simon Youens 完全相同的挑战,并且使用此显式 CIContext() 方法创建 CGImage 也为我解决了这个问题。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-04
  • 2015-11-24
  • 2018-01-09
相关资源
最近更新 更多