【发布时间】:2016-04-30 01:50:27
【问题描述】:
我想模糊我的 iOS 应用的整个屏幕,我不能使用UIBlurEffect,因为我希望能够控制模糊。所以我尝试使用CIGaussianBlur,但屏幕边缘出现问题。
我正在截取屏幕截图,然后通过CIFilter 和CIGaussianBlur 运行它,将CIImage 转换回UIImage,并在屏幕顶部添加新的模糊图像。
这是我的代码:
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)
这是我看到的:
它看起来几乎正确,除了边缘。似乎模糊度正在从模糊半径到边缘起飞。我尝试使用上下文大小,但似乎无法使其工作。
如何让模糊一直到边缘?
【问题讨论】:
标签: ios swift core-graphics gaussian core-image