- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我发现 CIFilter 与 CIGaussianBlur 滤镜的行为非常奇怪。
我正在对不同的图像快速连续地多次执行此方法。有时,将返回“最后处理的图像”而不是我发送的图像。例如,如果我有图像:
A、B 和 C。
如果我连续快速执行模糊处理,有时会得到如下结果:
模糊 A、模糊 A、模糊 C
+(UIImage *)applyBlurToImageAtPath:(NSURL *)imageUrlPath
{
if (imageUrlPath == nil)
return nil;
//Tried to create new contexts each loop, and also tried to use a singleton context
// if(CIImageContextSingleton == nil)
// {
// CIImageContextSingleton = [CIContext contextWithOptions:nil];
// }
CIContext *context = [CIContext contextWithOptions:nil];//[Domain sharedInstance].CIImageContextSingleton;
CIFilter *gaussianBlurFilter = [CIFilter filterWithName:@"CIGaussianBlur"];
[gaussianBlurFilter setDefaults];
CIImage *inputImage = [CIImage imageWithContentsOfURL:imageUrlPath];
[gaussianBlurFilter setValue:inputImage forKey:kCIInputImageKey];
[gaussianBlurFilter setValue:@(1) forKey:kCIInputRadiusKey];
//Tried both these methods for getting the output image
CIImage *outputImage = [gaussianBlurFilter valueForKey:kCIOutputImageKey];
// CIImage *outputImage = [gaussianBlurFilter outputImage];
//If I'm doing this, the problem never occurs, so the problem is isolated to the gaussianBlurFilter:
//outputImage = inputImage;
CGImageRef cgimg = [context createCGImage:outputImage fromRect:[inputImage extent]];
UIImage *resultImage = [UIImage imageWithCGImage:cgimg];
//Tried both with and without releasing the cgimg
CGImageRelease(cgimg);
return resultImage;
}
我已经在循环中尝试过,并在做手势等时运行该方法,但出现了同样的问题。 (imageUrlPath 中的图像是正确的。)此外,请参阅代码中的注释以了解我尝试过的内容。
我错过了什么吗? CIFilter 是否有一些内部缓存?该方法始终在主线程上运行。
最佳答案
根据给定的代码,并假设此方法始终在主线程上调用,您应该没问题,但我确实在代码中看到了一些不明智的事情:
CIContext
。我建议以不同的方式构建,而不是单例。保留您的 CIContext
并在执行大量渲染时重复使用相同的上下文。CIFilter
没有改变,也没有必要每次都重新创建它。如果您在同一线程上调用该方法,则只需在过滤器上设置 inputImage
键即可。每当输入图像发生更改时,您都需要从过滤器获取新的 outputImage
。我的猜测是,问题可能出在将 Core Image Context 渲染到相同的底层图形环境(可能是 GPU 渲染),但由于您不断地重新创建 CIContext,因此可能发生了一些奇怪的事情。
这只是一个猜测,因为我没有方便的代码来测试自己。如果您有一个演示该问题的测试项目,那么调试会更容易。另外-我仍然对线程持怀疑态度。它在不应用模糊的情况下工作的事实并不一定证明它是导致问题的模糊 - 根据我的经验,随机性更可能涉及线程问题。
关于ios - CIFilter 输出图像随机显示先前的输出图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37253477/
我的应用将 SceneKit 内容的“页面”与图像和文本交替。当我从图像页面前进到新的 SceneKit 页面时,前一个 SceneKit 页面中的内容会短暂显示,然后被新内容替换。时髦。 我只使用一
我正在尝试处理(在 C# 中)包含一些数字数据的大型数据文件。给定一个整数数组,如何对其进行拆分/分组,以便如果下一个 n(两个或更多)是负数,则前一个 n 元素被分组。例如,在下面的数组中,应该使用
刚接触promises,研究过。所以我的代码和我的理解: sql.connect(config).then(function(connection) { return connection.req
目前我在 if (roobaf) block 中有一些代码,这取决于 foo 和 bar 是否为假。我可以在 block 内再次检查这些条件,但感觉像是不必要的代码重复。 if (foo) {
我是一名优秀的程序员,十分优秀!