I'm trying to understand what is the most efficient way to create a CIImage
with a pattern, based on an image file.
let patternImage = UIImage(named: "pattern.png")
The first approach I took:
// First create UIColor pattern
let uiColorPattern = UIColor(patternImage: patternImage!)
// Than init CIColor using the UIColor pattern object
let ciColorPattern = CIColor(color: uiColorPattern)
// Finally, create CIImage using the CIColor initialiser
let ciImagePattern = CIImage(color: ciColorPattern) //
Sadly, for unknown reason the CIImage is simply blank. I also tried applying clampedToExtent()
and than cropping it but it still blank.
The second approach I took (works but too slow):
UIGraphicsBeginImageContext(size) // create context
patternImage?.drawAsPattern(in: rect) // draw pattern as 'UIImage'
let patternUIImage = UIGraphicsGetImageFromCurrentImageContext() // fetch 'UIImage'
UIGraphicsEndImageContext() // end context
if let patternUIImage = patternUIImage {
let ciImagePattern = CIImage(image: patternUIImage) // Create 'CIImage' using 'UIImage'
}
this method works but as I said, too slow.
In general, my intuition was that if I could make the first approach work, it'll be a lot more efficient than the second approach.