如何在 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
@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