如何从“CIRandomGenerator”过滤器中获取不同的随机图像?

How do you get different random images from the `CIRandomGenerator` filter?

在我看来 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 这个随机过滤器的正确方法?

我差点把它当作评论,但我觉得它值得回答。

实际上,您向我描述的似乎是正确的。考虑 - 什么是 运行dom 数字生成器?当然它可能需要 "seed",但最终大多数生成器 提供一个相当可预测的数字,如果 运行 一次又一次。 (前提是你不开始在等式中添加其他东西。)

所以CIRandomGenerator的输出可能被认为是同一种东西。从 (0,0) 取 "random" 到无穷大。但是一旦你有了 "seeded" 东西——给定一个不是 (0,0) 的起源——你实际上已经 "captured" 大多数人会考虑的东西 "random".