Swift playground - 无法将过滤后的UIImage转换为CGImage

Sim*_*ens 2 uiimage cgimage ciimage swift

在Swift游乐场中,我正在加载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'
Run Code Online (Sandbox Code Playgroud)

怎么了?

Sim*_*man 5

一个UIImage从创建CIImage,你所做的就是不被支持CGImage.您需要明确创建一个:

let context = CIContext()
let filteredCGImageRef = context.createCGImage(
    CIout!, 
    fromRect: CIout!.extent)
Run Code Online (Sandbox Code Playgroud)

如果你需要一个UIImage,创建一个从CGImage由渲染CIContext:

UIImage(CGImage: filteredCGImageRef)
Run Code Online (Sandbox Code Playgroud)

干杯,

西蒙