Ios 使用GPUImage vs.Core Image vs.UIImage解压?

Ios 使用GPUImage vs.Core Image vs.UIImage解压?,ios,objective-c,uiimage,gpuimage,core-image,Ios,Objective C,Uiimage,Gpuimage,Core Image,我们正在构建一个能够处理大量图像的应用程序。我们对核心映像、GPUImage和UIImage以及它如何解压缩映像都感兴趣。我们已经熟悉这样一个事实:在后台线程上解压缩图像将有助于消除UI中的口吃或抖动,从而避免滚动。然而,我们不太熟悉解压工作在哪里进行。我们还使用UIImage对图像进行了一些裁剪。问题来了: 背景:我们一直支持iPhone4,但很快可能会放弃iPhone4,转而支持iPhone4S作为我们最古老的设备 1是否在GPU上对图像进行解压缩。。。核心形象?GPUImage?UIIma

我们正在构建一个能够处理大量图像的应用程序。我们对核心映像、GPUImage和UIImage以及它如何解压缩映像都感兴趣。我们已经熟悉这样一个事实:在后台线程上解压缩图像将有助于消除UI中的口吃或抖动,从而避免滚动。然而,我们不太熟悉解压工作在哪里进行。我们还使用UIImage对图像进行了一些裁剪。问题来了:

背景:我们一直支持iPhone4,但很快可能会放弃iPhone4,转而支持iPhone4S作为我们最古老的设备

1是否在GPU上对图像进行解压缩。。。核心形象?GPUImage?UIImage

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

3基于我们的设备配置文件,GPU支持是否存在差异


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

要回答您关于解压缩的问题,Core Image、GPUImage和UIImage都使用几乎相同的方法从磁盘加载映像。对于核心图像,您从UIImage开始,对于GPUIImage,您可以看到它当前依赖于通常通过UIImage获得的CGImageRef

UIImage在CPU端执行图像解压缩,我所研究的其他库也执行同样的操作,以提高GPUIImage的图像加载性能。GPUImage用于图像加载的最大瓶颈是必须将图像加载到UIImage中,然后通过核心图形将其上载到纹理中。我正在寻找更直接的方法来获取像素数据,但我尝试过的所有解压例程最终都比本机UIImage加载慢

图像的裁剪可以在GPU上完成,Core image和GPUImage都允许您这样做。在图像加载开销方面,这可能比通过核心图形进行裁剪快,也可能不快,因此您需要根据自己关心的图像大小对其进行基准测试。更复杂的图像处理操作,如颜色调整等。如果可以减少这种图像加载开销,GPU端处理将在更多情况下获胜

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


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

@Tommy-我知道苹果压碎的PNG往往有性能优势,因为它们有一些内置的加速功能来拉出这些图像,但我不确定是否有一个普遍的情况。我知道最近有一些关于优化提取速度的不同文件格式的有趣实验:。考虑到它对许多应用程序来说都是一个瓶颈,我还没有花足够的时间来处理它。