Ich möchte den gesamten Bildschirm meiner iOS-App verwischen, und ich kann UIBlurEffect
nicht verwenden, weil ich in der Lage sein möchte, die Unschärfe zu steuern. Ich versuche also, CIGaussianBlur
zu verwenden, aber ich habe Probleme mit den Rändern des Bildschirms.Gaußsche Unschärfe im Vollbildmodus
ich einen Screenshot des Bildschirms einnimmt, und dann durch eine CIFilter
mit CIGaussianBlur
läuft, die CIImage
zurück zu UIImage
, und Hinzufügen des neuen verschwommenes Bild auf dem Bildschirm zu konvertieren.
Hier ist mein Code:
let layer = UIApplication.sharedApplication().keyWindow?.layer
UIGraphicsBeginImageContext(view.frame.size)
layer!.renderInContext(UIGraphicsGetCurrentContext()!)
let screenshot = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
let blurRadius = 5
var ciimage: CIImage = CIImage(image: screenshot)!
var filter: CIFilter = CIFilter(name:"CIGaussianBlur")!
filter.setDefaults()
filter.setValue(ciimage, forKey: kCIInputImageKey)
filter.setValue(blurRadius, forKey: kCIInputRadiusKey)
let ciContext = CIContext(options: nil)
let result = filter.valueForKey(kCIOutputImageKey) as! CIImage!
let cgImage = ciContext.createCGImage(result, fromRect: view.frame)
let finalImage = UIImage(CGImage: cgImage)
let blurImageView = UIImageView(frame: view.frame)
blurImageView.image = finalImage
blurImageView.sizeToFit()
blurImageView.contentMode = .ScaleAspectFit
blurImageView.center = view.center
view.addSubview(blurImageView)
Hier ist, was ich sehe:
Es sieht fast richtig außer den Rändern. Es scheint, dass die Unschärfe vom Unschärfe-Radius bis zum Rand zunimmt. Ich habe versucht, mit der Kontextgröße zu spielen, aber es scheint nicht zu funktionieren.
Wie kann ich die Unschärfe bis an die Ränder bringen?
Sie Sir, verdienen eine Art Leistung für diese Antwort .. Es funktionierte wie ein Charme.! Vielen Dank :) – Wiingaard