Reputation: 8062
I have this new iOS 8 Swift project and in one of its view controllers I have to set the image. However, I wanna change the contrast of the image using CIFilter
before sending it to the view:
So this is my code:
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
Well, I'm simply getting an image, applying a transformation to it and then get the transformed version as a UIImage
and setting it back to my view.
But I only get an error:
fatal error: unexpectedly found nil while unwrapping an Optional value
Can someone please tell me what am I doing wrong here?
Upvotes: 1
Views: 1946
Reputation: 236260
You almost got it.
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:"https://i.sstatic.net/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 or later
let lecturePicture = UIImage(data: try! Data(contentsOf: URL(string: "https://i.sstatic.net/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
Upvotes: 5