OStack程序员社区-中国程序员成长平台

标题: ios - 使用 GPUImage 与 Core Image 与 UIImage 解压缩? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-13 08:58
标题: ios - 使用 GPUImage 与 Core Image 与 UIImage 解压缩?

我们正在构建一个可以处理大量图像的应用程序。我们对 Core Image、GPUImage 和 UIImage 以及它如何解压缩图像都感兴趣。我们已经熟悉这样一个事实,即在后台线程上对图像进行解压缩将有助于消除 UI 滚动时的卡顿或抖动。但是,我们对减压工作在哪里进行并不十分熟悉。我们还使用 UIImage 对图像进行了一些裁剪。那么问题来了:

背景:我们一直支持 iPhone 4 的设备,但很快可能会放弃 iPhone 4,转而使用 iPhone 4S 作为我们最旧的设备。

1) 图像的解压是在 GPU 上完成的吗? ...核心形象? GPU图像? UIImage?

2) 可以在 GPU 上裁剪图像吗? ...核心形象? GPU图像? UIImage?

3) 根据我们的设备配置文件,GPU 支持是否存在差异?

基本上,我们希望将尽可能多的负载卸载到 GPU 上,以释放设备上的 CPU。此外,我们希望在 GPU 上执行比在 CPU 上更快的操作。



Best Answer-推荐答案


回答您关于解压缩的问题:Core Image、GPUImage 和 UIImage 都使用几乎相同的方式从磁盘加载图像。对于 Core Image,您从 UIImage 开始,对于 GPUImage,您可以在 the GPUImagePicture source 中查看。它目前依赖于通常通过 UIImage 获得的 CGImageRef。

UIImage 在 CPU 端进行图像解压缩,而我研究过的其他用于提高 GPUImage 图像加载性能的库也是如此。 GPUImage 中图像加载的最大瓶颈是必须将图像加载到 UIImage 中,然后通过 Core Graphics 将其上传到纹理中。我正在寻找更直接的方法来获取像素数据,但我尝试过的所有解压缩例程最终都比原生 UIImage 加载慢。

图像的裁剪可以在 GPU 上完成,Core Image 和 GPUImage 都可以做到这一点。由于图像加载开销,这可能会也可能不会比通过 Core Graphics 进行裁剪更快,因此您需要自己针对您关心的图像尺寸进行基准测试。更复杂的图像处理操作,如颜色调整等generally end up being overall wins on the GPU for most image sizes on most devices .如果可以减少此图像加载开销,GPU 端处理将在更多情况下获胜。

就设备类的 GPU 功能而言,不同 iOS 设备之间存在显着的性能差异,但功能往往基本相同。片段着色器处理性能在 iPhone 4、4S、5 和 5S 设备之间可能存在数量级差异,对于某些操作,5S 比 4 快 1000 倍。A6 和 A7 设备具有一些旧设备缺乏的扩展,但这些只在非常特定的情况下发挥作用。

最大的区别往往是 GPU 硬件支持的最大纹理大小,iPhone 4 及更早的设备仅限于 2048x2048 纹理,而 iPhone 4S 及更高版本支持 4096x4096 纹理。这可能会限制使用 GPUImage 之类的东西在 GPU 上处理的图像的大小。

关于ios - 使用 GPUImage 与 Core Image 与 UIImage 解压缩?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25565790/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4