在我看来,CIFilter(name: "CIRandomGenerator")
的输出始终相同,无论是否多次引用实例的 outputImage
或者是否实例化一个新的过滤器:
import CoreImage
let randomFilter = CIFilter(name: "CIRandomGenerator")
let outputImage = randomFilter!.outputImage!.cropped(to: (CGRect(x: 0, y: 0, width: 100, height: 100)))
let outputImage2 = randomFilter!.outputImage!.cropped(to: (CGRect(x: 0, y: 0, width: 100, height: 100)))
// pause for some amount of time so that it's definitely not
// instantiating a PRNG with the same timestamp
let rf2 = CIFilter(name: "CIRandomGenerator")
rf2!.outputImage!.cropped(to: (CGRect(x: 0, y: 0, width: 100, height: 100)))
如果你检查像素,就会发现它们都是相同的。
我没有看到任何类型的seed
参数可以传入来正确初始化伪随机数生成器。
由于CIFilter
具有无限范围,我可以随机偏移调用cropped
中的位置,这似乎有效,但它看起来像是一个黑客。我是否缺少初始化/getNext
这个随机过滤器的正确方法?
最佳答案
我几乎把它作为评论,但我觉得它值得回答。
这实际上看起来你已经正确地向我描述了它。考虑一下 - 什么是随机数生成器?当然,它可能需要一个“种子”,但最终,如果一次又一次运行,大多数生成器将提供一个相当可预测的数字。 (前提是您不开始在方程式中添加其他内容。)
因此,CIRandomGenerator
的输出可以被认为是同一类东西。从 (0,0) 开始,它是“随机”到无穷大的。但是,一旦您“播种”了某些东西(给定除 (0,0) 之外的原点),您就有效地“捕获”了大多数人认为是“随机”的东西。
关于ios - 如何从 `CIRandomGenerator` 过滤器中获取不同的随机图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46207952/