2015-02-24 43 views
1

我有這個新的iOS 8 Swift項目,並且在它的一個視圖控制器中我必須設置圖像。但是,我想將它發送到視圖之前更改使用CIFilter圖像的對比度:不能使用CIFilter從CIImage中提取UIImage

所以這是我的代碼:

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 

有人能告訴我什麼我做錯了嗎?

回答

5

你幾乎明白了。

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 

斯威夫特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 
+0

讓我們[繼續聊天討論](HTTP://chat.stackoverflow的.com /房間/ 71543 /討論-之間萊昂納多-Savio的-dabus和 - rodrigoalves)。 – 2015-02-24 03:51:01

+0

爲什麼fromRect是必需的?這是一個高內存操作! – Aspen 2015-05-14 05:34:21