2015-02-24 4 views
1

У меня есть новый проект iOS 8 Swift, и в одном из его контроллеров просмотра мне нужно установить изображение. Тем не менее, я хочу изменить контрастность изображения, используя CIFilter перед отправкой его мнение:Не удается извлечь UIImage из CIImage с 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 

Может кто-то пожалуйста, скажите мне, что я здесь делаю неправильно?

ответ

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 

Swift 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 
+0

Давайте [продолжить это обсуждение в чате] (HTTP: //chat.stackoverflow .com/номера/71543/обсуждение промежуточности-САВИО Леонардо-dabus-и-rodrigoalves). –

+0

Зачем нужен forRect? Это высокая память! – Aspen