Używam obrazu rdzenia i stosuję sepię CIFilter na moim obrazie. Uruchamiam filtr raz w viewDidLoad, a następnie natychmiast wywołuje inną funkcję, która dodaje filtr ponownie. Z jakiegoś powodu, gdy próbuję uzyskać dostęp do obrazu wyjściowego, aplikacja ulega awarii i mówi, że obraz wyjściowy jest zerowy. Czy ktoś wie, dlaczego tak się dzieje?Obraz wyjściowy CIFilter zero
Dzięki
import UIKit
class ViewController: UIViewController {
@IBOutlet weak var myimage: UIImageView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let image = CIImage(image: myimage.image)
let filter = CIFilter(name: "CISepiaTone")
filter.setDefaults()
filter.setValue(image, forKey: kCIInputImageKey)
myimage.image = UIImage(CIImage: filter.outputImage)
self.reapplyFilter()
}
func reapplyFilter(){
let image = CIImage(image: myimage.image)
let filter = CIFilter(name: "CISepiaTone")
filter.setDefaults()
filter.setVa lue(image, forKey: kCIInputImageKey)
//ERROR HERE: fatal error: unexpectedly found nil while unwrapping an Optional value
myimage.image = UIImage(CIImage: filter.outputImage)
//ERROR
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
Zobacz też moją książkę o wyodrębnianiu _real_ obrazu z CIImage: http://www.apeth.com /iOSBook/ch15.html#_cifilter_and_ciimage – matt
A dla kodu Swift: https://github.com/mattneub/Programowanie-iOS-Book-Examples/blob/master/bk2ch02p070filters/ch15p419filters/ViewController.swift – matt
Uważam, że opisane rozwiązanie przez http://stackoverflow.com/users/1955870/fz działa (używając 'CIContext'). Czy istnieje powiązane ryzyko? – SwiftArchitect