Проблемы с нечеткостью изображения на симуляторе iOS 10.2.1 - PullRequest
0 голосов
/ 23 мая 2019

Я использую этот код, чтобы размыть мои UIImage

extension UIImage {
    func blurred(radius: CGFloat) -> UIImage {
        let ciContext = CIContext(options: nil)
        guard let cgImage = cgImage else { return self }
        let inputImage = CIImage(cgImage: cgImage)
        guard let ciFilter = CIFilter(name: "CIGaussianBlur") else { return self }
        ciFilter.setValue(inputImage, forKey: kCIInputImageKey)
        ciFilter.setValue(radius, forKey: "inputRadius")
        guard let resultImage = ciFilter.value(forKey: kCIOutputImageKey) as? CIImage else { return self }
        guard let cgImage2 = ciContext.createCGImage(resultImage, from: inputImage.extent) else { return self }
        return UIImage(cgImage: cgImage2)
    }
}

Но для возврата изображения из этой операции требуется много времени.

На самом деле эта операция занимает около 2 секунд: guard let cgImage2 = ciContext.createCGImage(resultImage, from: inputImage.extent) else { return self}

Я не тестировал его на реальном устройстве, но не уверен, что код эффективен

1 Ответ

1 голос
/ 23 мая 2019

Этот код выглядит отлично, хотя вы должны кэшировать возвращаемое изображение, а не вызывать его повторно, если это вообще возможно; как указывает Мэтт в комментариях ниже, вы должны также использовать общий CIContext вместо того, чтобы каждый раз устанавливать новый.

Проблема с производительностью, которую вы видите, связана с тем, что симулятор имеет очень отличающиеся характеристики производительности от реального оборудования. Похоже, что Core Image использует эмулированный интерфейс OpenGL ES симулятора (который работает медленно) или процессор (который работает медленнее). Тестирование его на устройстве iOS даст вам гораздо лучшее представление о производительности, которую вы должны ожидать.

...