【发布时间】:2018-05-29 23:50:25
【问题描述】:
我正在尝试了解基于图像文件创建带有图案的CIImage 的最有效方法是什么。
let patternImage = UIImage(named: "pattern.png")
我采取的第一种方法:
// 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) //
遗憾的是,由于未知原因,CIImage 只是空白。我还尝试应用clampedToExtent(),而不是裁剪它,但它仍然是空白的。
我采用的第二种方法(有效但太慢):
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'
}
这种方法有效,但正如我所说,太慢了。
总的来说,我的直觉是,如果我能让第一种方法奏效,它会比第二种方法高效得多。
任何其他方法/建议将不胜感激!
【问题讨论】:
-
为什么需要这个?最终结果是什么?图案有多大?
-
嘿@meaning-matters。谢谢你的回复。我需要 CIImage 来提供 AVMutableVideoComposition->applyingCIFiltersWithHandler。 (developer.apple.com/documentation/avfoundation/…)。图案图像文件非常小。但最终我将应用它的最终矩形是关于 UIScreen 边界的。希望在这里得到一些帮助:)
-
那么你是在严格的范围内应用这个“模式”,还是在无限的范围内?你真的尝试过任何 CIFIlter 生成器吗?
-
@dfd 是的,严格的界限。 (假设我使用 UIScreen.main.bounds 作为我的矩形)。我没有尝试 CIFilter 生成器,因为我使用的是基于文件的模式。如果有一个接受图像作为输入并生成 CIImage 模式的 CIFilter,那将是完美的,但我还没有找到一个
-
嘿@meaning-matters,请PM'ing,以防我的评论没有出现
标签: ios uiimage core-image uigraphicscontext ciimage