如何在 swift 4 中实现 CICheckerboardGenerator?

How to implement CICheckerboardGenerator in swift 4?

@IBOutlet var imageView: UIImageView!

var context: CIContext!
var currentFilter: CIFilter!


override func viewDidLoad() {

    super.viewDidLoad()

    context = CIContext()

    currentFilter = CIFilter(name: "CICheckerboardGenerator", parameters: ["inputColor0" : CIColor.white, "inputColor1" : CIColor.black, "inputCenter" : CIVector(x: 0, y: 0), "inputWidth" : 50.00])

    if let cgimg = context.createCGImage(currentFilter.outputImage!, from: currentFilter.outputImage!.extent) {
        let processedImage = UIImage(cgImage: cgimg)
        imageView.image = processedImage
    }
}

我在 class 的顶部和 viewDidLoad() 函数中创建了两个变量,试图生成棋盘。我究竟做错了什么?我知道这个过滤器不需要输入图像。它没有像我期望的那样创建图像。

您需要创建如下 CGImage

if let cgimg = context.createCGImage(currentFilter.outputImage!, from: self.imageView.bounds) {
    self.imageView.image = UIImage(cgImage: cgimg)
}

我认为最初问题的主要问题是结果图像的大小:currentFilter.outputImage!.extent

CICheckerboardGenerator 生成的图像基本上是一个无限平面(在可用 CGFloat 值的范围内)。为了使用生成的 CIImage,您需要裁剪它:

if let pattern = currentFilter.outputImage {
    let image = pattern.cropped(to: self.imageView.bounds)
    self.imageView.image = UIImage(ciImage: image)

}

这样你既不需要 CIContext 也不需要中间 CGImage