Я хотел, чтобы захватить снимок небольшой области экрана и применить размытие к нему - хотя и на 60fps - что невозможно с этим кодом:Более эффективный способ размывания небольшой части UIView?
let rectangle = CGRect(x: -37, y: -153, width: UIScreen.main.bounds.width, height: UIScreen.main.bounds.height)
captureSnapShotWithGaussianBlur(rect: rectangle)
public func captureSnapShotWithGaussianBlur(rect: CGRect) -> UIImage {
let SCREEN_SIZE_SCALE_FACTOR = UIScreen.main.scale
let CROPPING_RECT = CGRect(x: 0, y: 0, width: 118*SCREEN_SIZE_SCALE_FACTOR, height: 66*SCREEN_SIZE_SCALE_FACTOR)
UIGraphicsBeginImageContextWithOptions(CGSize(width: 118, height: 66), true, 0.0)
backgroundView!.drawHierarchy(in: rect, afterScreenUpdates: true)
let capturedImage: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
let ciimage: CIImage = CIImage(image: capturedImage)!
UIGraphicsEndImageContext()
let gaussianfilter: CIFilter = CIFilter(name:"CIGaussianBlur")!
gaussianfilter.setDefaults()
gaussianfilter.setValue(ciimage, forKey: kCIInputImageKey)
gaussianfilter.setValue(10, forKey: kCIInputRadiusKey)
let outputImage: CIImage = gaussianfilter.outputImage!
let finalImage: UIImage = UIImage(ciImage: outputImage.cropping(to: CROPPING_RECT), scale: SCREEN_SIZE_SCALE_FACTOR, orientation: UIImageOrientation.up)
return finalImage
}
Одна из проблем, я вижу, с моим что я думаю, что Gaussian Blur применяется ко всему изображению (из-за UIScreen.main.bounds, используемых для прямоугольника drawHierarchy).
Я надеялся, что был способ сделать resizableSnapshotView() экрана, а затем сделать drawHierarchy в этом представлении и извлечь изображение - увы, это не сработает (хотя это похоже на симулятор, но не на телефон, где он просто делает черный).
Любые предложения о том, как сделать более эффективный метод захвата и размытия?
Cheers!
с помощью Вы встроенная функции моментальных снимков, когда вы упомянули пытаетесь это первый мгновенными снимками? – SeanLintern88
Да, я пробовал много комбинаций методов с использованием встроенных методов моментальных снимков, а затем пытался использовать содержимое этого для создания изображения для размытия - безрезультатно. Методы моментальных снимков отлично работают в симуляторе, но отображаются на черном на самом телефоне. Apple - в документах - говорит использовать drawHierarchy для применения эффектов размытия и т. Д. Тем не менее, я просто хочу, чтобы можно было выбрать область экрана и применить размытие до менее чем за 1/60 секунды. –