Swift游乐场 - 无法将筛选后的UIImage转换为CGImage

4
在一个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'

有什么问题吗?


您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Bryan Chen
@BryanChen - 这是同样的问题,但那是一个Objective C的解决方案。 - Simon Youens
这就是为什么我没有关闭投票你的问题。但链接确实回答了你为什么CGImage为空。 - Bryan Chen
1个回答

6

你所创建的UIImage是从CIImage创建的,它没有支持CGImage。你需要明确地创建一个:

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

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

UIImage(CGImage: filteredCGImageRef)

祝福您,

西蒙


完美 - 正是我所需要的。 - Simon Youens
我遇到了与Simon Youens完全相同的挑战,我的CIFiltered UIImage在使用.cgImage进行转换时返回nil,使用这个显式CIContext()方法创建CGImage也为我解决了这个问题。非常感谢! - Isaac A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接