2014-08-29 82 views
2

我們正在構建一個可以處理大量圖像的應用程序。我們對Core Image,GPUImage和UIImage都感興趣,以及它如何解壓圖像。我們已經很熟悉這樣一個事實,即在後臺線程上執行圖像解壓縮將有助於消除我們的UI中的口吃或抖動將滾動。但是,我們對這個減壓工作的發生地點並不是很熟悉。我們也使用UIImage做一些圖像裁剪。所以下面是問題:解壓使用GPUImage與核心圖像與UIImage?

背景:我們一直支持iPhone 4的設備,但很快可能會將iPhone 4支持爲iPhone 4S作爲我們最古老的設備。

1)在GPU上完成的圖像解壓縮?核心形象? GPUImage? UIImage的?

2)可以在GPU上完成圖像裁剪嗎?核心形象? GPUImage? UIImage的?

3)根據我們的設備配置文件,GPU支持有差異嗎?

基本上我們想要儘可能多地卸載GPU以釋放設備上的CPU。另外,我們希望在GPU上執行任何操作,而不是在CPU上執行操作。

回答

4

若要解答有關解壓縮的問題:核心映像,GPUImage和UIImage都使用幾乎相同的方式從磁盤加載圖像。對於核心映像,您從UIImage開始,對於GPUImage,您可以在the GPUImagePicture source中看到它目前依賴通常通過UIImage獲取的CGImageRef。

UIImage在CPU端執行圖像解壓縮,而我爲提高GPUImage的圖像加載性能所做的其他庫也是如此。 GPUImage中加載圖像的最大瓶頸是必須將圖像加載到UIImage中,然後通過Core Graphics進行瀏覽以將其上載到紋理中。我正在研究更直接的方式來獲取像素數據,但我試過的所有解壓縮例程最終都比本機UIImage加載速度慢。

圖像的裁剪可以在GPU上完成,並且核心圖像和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快4倍.A6和A7設備有少數擴展,舊設備缺乏,但這些只在非常特殊的情況下才起作用。

最大的區別傾向於通過GPU硬件支持的最大紋理大小,與iPhone 4和限定於2048×2048的紋理和iPhone 4S和更高支撐4096×4096紋理更早的設備。這可以限制使用GPUImage之類的可以在GPU上處理的圖像的大小。

+0

@Tommy - 我知道,蘋果的「砸」 PNG圖像往往有性能上的優勢,因爲他們有一些內置的加速度拉那些了,但我不知道關於廣義情況。我知道最近有一些有趣的實驗用不同的文件格式來優化提取速度:https://github.com/gameclosure/gcif。考慮到許多應用程序存在多大的瓶頸,我沒有花太多時間。 – 2014-08-29 17:29:25