【问题标题】:Can't extract UIImage from CIImage with CIFilter无法使用 CIFilter 从 CIImage 中提取 UIImage
【发布时间】:2017-12-18 23:50:17
【问题描述】:

我有这个新的 iOS 8 Swift 项目,我必须在它的一个视图控制器中设置图像。但是,我想在将图像发送到视图之前使用 CIFilter 更改图像的对比度:

这是我的代码:

view = UIImageView(frame:CGRectMake(0, 0, 200, 200))

var lecturePicture = UIImage(named: "placeholder")            
var beginImage = lecturePicture?.CIImage
var controlsFilter = CIFilter(name: "CIColorControls")

controlsFilter.setValue(beginImage, forKey: kCIInputImageKey)
controlsFilter.setValue(1.5, forKey: "inputContrast")

var displayImage = UIImage(CIImage: controlsFilter.outputImage) // breakpoint
(view as UIImageView!).image = displayImage

好吧,我只是获取图像,对其应用转换,然后将转换后的版本作为 UIImage 并将其设置回我的视图。

但我只得到一个错误:

fatal error: unexpectedly found nil while unwrapping an Optional value

谁能告诉我我在这里做错了什么?

【问题讨论】:

    标签: ios swift uiimage cifilter ciimage


    【解决方案1】:

    你几乎明白了。

    controlsFilter.setValue(beginImage, forKey: kCIInputImageKey)  // here you did it the right way
    controlsFilter.setValue(1.5, forKey: "inputContrast")       // you should keep the same approach here
    

    斯威夫特 2

    let lecturePicture = UIImage(data: NSData(contentsOfURL: NSURL(string:"http://i.stack.imgur.com/Xs4RX.jpg")!)!)!
    let controlsFilter = CIFilter(name: "CIColorControls")
    let beginImage = CIImage(image: lecturePicture)
    controlsFilter.setValue(beginImage, forKey: kCIInputImageKey)
    controlsFilter.setValue(1.5, forKey: kCIInputContrastKey)
    let displayImage = UIImage(CGImage: CIContext(options: nil).createCGImage(controlsFilter.outputImage, fromRect:controlsFilter.outputImage.extent()))!
    displayImage
    

    Swift 3 或更高版本

    let lecturePicture = UIImage(data: try! Data(contentsOf: URL(string: "http://i.stack.imgur.com/Xs4RX.jpg")!))!
    let controlsFilter = CIFilter(name: "CIColorControls")!
    let beginImage = CIImage(image: lecturePicture)
    controlsFilter.setValue(beginImage, forKey: kCIInputImageKey)
    controlsFilter.setValue(1.5, forKey: kCIInputContrastKey)
    let displayImage = UIImage(cgImage: CIContext(options: nil).createCGImage(controlsFilter.outputImage!, from: controlsFilter.outputImage!.extent)!)
    displayImage
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2012-03-09
    • 2012-06-09
    • 2012-02-24
    • 2014-01-13
    • 2012-09-01
    • 1970-01-01
    相关资源
    最近更新 更多