gpt4 book ai didi

ios - UICollectionView 与 UIImageViews 的糟糕表现与核心图像操作图像

转载 作者:行者123 更新时间:2023-11-28 22:28:18 24 4
gpt4 key购买 nike

我的应用程序中有一个 UICollectionView,其单元格主要由 UIImageView 组成,其中包含已使用 Core Image 进行处理以降低色彩饱和度的图像。滚动时性能绝对糟糕。当我对其进行概要分析时,绝大部分时间(80% 左右)都不在我的代码中,甚至不在我的堆栈中。这一切似乎都在核心动画代码中。可能有人知道为什么会这样吗?

在我的 UICollectionViewCell 子类中,我有这样的东西:

UIImage *img = [self obtainImageForCell];
img = [img applySaturation:0.5];
self.imageView.image = img;

applySaturation 看起来像这样:

CIImage *image = [CIImage imageWithCGImage:self.CGImage];
CIFilter *filter = [CIFilter filterWithName:@"CIColorControls"];
[filter setValue:image forKey:kCIInputImageKey];
[filter setValue:[NSNumber numberWithFloat:saturation] forKey:@"inputSaturation"];
return [UIImage imageWithCIImage:filter.outputImage];

我唯一的猜测是 Core Animation 不能很好地与 Core Image 配合使用。 Apple docs说说 CIImage:

Although a CIImage object has image data associated with it, it is not an image. You can think of a CIImage object as an image “recipe.” A CIImage object has all the information necessary to produce an image, but Core Image doesn’t actually render an image until it is told to do so. This “lazy evaluation” method allows Core Image to operate as efficiently as possible.

在制作动画时在最后一分钟进行此评估可能很棘手。

最佳答案

我有完全相同的问题,通过避免在单元格更新期间触发 Core Image 过滤器来解决。

我认为 Apple 文档中有关懒惰评估/食谱的内容更多地针对这样一种想法,即您可以非常有效地将核心图像过滤器链接在一起。但是,当您想要显示核心图像过滤器链的结果时,需要立即对事物进行评估,如果在快速 ScrollView 期间“然后在那里”并且过滤器在问题需要大量处理(他们中的许多人都这样做)。

您可以尝试摆弄 GPU 与 CPU 处理,但我发现将图像数据移入和移出 CIImage 的开销可能更大(参见我的回答 here)

我的建议是像处理使用在线图像填充 ScrollView 一样处理这种处理 - 即异步处理、使用占位符(例如预处理图像)并缓存结果以供重用。

更新

回复您的评论:

当您从 CIImage 中提取数据时,将应用适用的过滤器 - 例如,使用 imageWithCIImage: [警告 - 这是我的推论,我没有测试过]。

但这不是您的问题...您需要在后台线程上处理您的图像,因为处理需要时间来阻止滚动。同时在滚动单元格中显示其他内容,例如纯色或 - 更好 - 您正在输入 CIImage 进行过滤的 UIImage。处理完成后更新单元格(检查它是否仍需要更新,那时它可能已经滚动到屏幕外)。将过滤后的图像保存在某种持久存储中,这样您就不需要对其进行第二次过滤,并在需要再次显示图像时检查缓存,然后再从头开始重新处理。

关于ios - UICollectionView 与 UIImageViews 的糟糕表现与核心图像操作图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18282612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com