【问题标题】:UIImageVIew crash when CIFiltered UIImage setted设置 CIFiltered UIImage 时 UIImageVIew 崩溃
【发布时间】:2019-08-22 11:28:56
【问题描述】:

我正在尝试“CIFiltering”一些图像。 但是放置过滤后的 uiimage 时 UIImageView 崩溃。 我从未见过这种情况,也不知道下一步如何解决。 请帮助或教一些技巧。谢谢。

https://developer.apple.com/documentation/coreimage/simulating_scratchy_analog_film

这就是发生的事情。

【问题讨论】:

  • 虽然是一个很好的答案,但对 原因 的解释却相当糟糕。 (Apple 文档有时可能很神秘。)CIImage 不是图像,而是生成图像的recipe。您可以获取 CIImage 并将其转换为 UIImageCGImage (UI == UIKit, CG == CoreGraphics) 基本上任何您希望的大小/范围,但通常您保持比例不变。您可能还面临另一个问题,接受的答案有助于解决 - 通过使用 COreGraphics 或 CGImage 将 CIImage 转换为 UIImage。它在文档中相当模糊,但除非您创建 CGImage,否则您将获得 SIGABRT

标签: ios swift uiimageview uiimage cifilter


【解决方案1】:

请在功能上做如下改动:

在函数开头添加:

public func filter(_image) {
    let aUIImage     = _image

    guard let aCGImage = aUIImage.cgImage else { return }
    let aCIImage       = CIImage(cgImage: aCGImage)
    let context        = CIContext(options: nil)

并将这一行 let image = UIImage(ciImage: speckledImage) 替换为:

let imageRef = context.createCGImage(speckledImage, from: aCIImage.extent)
let image    = UIImage(cgImage: imageRef!)

原因:

您正在创建一个 CIImage 并尝试将其附加到 UIImageView 这是不可能的。根据苹果文档:Although a CIImage object has image data associated with it, it is not an image.

更多信息请参考此链接:https://developer.apple.com/documentation/coreimage/ciimage

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 2012-08-15
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多