版本記錄
| 版本號 | 時間 |
|---|---|
| V1.0 | 2018.01.28 |
前言
Core Image是IOS5中新加入的一個框架,里面提供了強大高效的圖像處理功能,用來對基于像素的圖像進行操作與分析。還提供了很多強大的濾鏡,可以實現(xiàn)你想要的效果,下面我們就一起解析一下這個框架。感興趣的可以參考上面幾篇。
1. Core Image框架詳細解析(一) —— 基本概覽
2. Core Image框架詳細解析(二) —— Core Image濾波器參考
3. Core Image框架詳細解析(三) —— 關(guān)于Core Image
4. Core Image框架詳細解析(四) —— Processing Images處理圖像(一)
5. Core Image框架詳細解析(五) —— Processing Images處理圖像(二)
6. Core Image框架詳細解析(六) —— 圖像中的面部識別Detecting Faces in an Image(一)
7. Core Image框架詳細解析(七) —— 自動增強圖像 Auto Enhancing Images
8. Core Image框架詳細解析(八) —— 查詢系統(tǒng)中的過濾器 Querying the System for Filters
9. Core Image框架詳細解析(九) —— 子類化CIFilter:自定義效果的配方 Subclassing CIFilter: Recipes for Custom Effects(一)
10. Core Image框架詳細解析(十) —— 子類化CIFilter:自定義效果的配方 Subclassing CIFilter: Recipes for Custom Effects(二)
Getting the Best Performance - 獲得最佳性能
Core Image提供了許多選項來創(chuàng)建圖像,上下文和呈現(xiàn)內(nèi)容。 你如何選擇完成一項任務(wù)取決于:
- 您的應(yīng)用需要多久執(zhí)行一次任務(wù)
- 您的應(yīng)用程序是否需要處理靜止或者視頻圖像
- 是否您需要支持實時處理還是分析
- 色彩保真度對您的用戶有多重要
您應(yīng)該閱讀Performance Best Practices,以確保您的應(yīng)用程序盡可能高效地運行。
Performance Best Practices - 性能最佳實踐
遵循這些實踐以獲得最佳性能:
-
每次渲染時不要創(chuàng)建
CIContext對象。- 上下文存儲大量的狀態(tài)信息,重用它們會更有效率。
評估你的應(yīng)用是否需要色彩管理。除非你需要它,否則不要使用它。請參閱Does Your App Need Color Management
-
使用GPU上下文呈現(xiàn)
CIImage對象時,避免使用Core Animation動畫。- 如果您需要同時使用兩者,則可以同時設(shè)置使用CPU。
-
確保圖像不超過CPU和GPU限制。
-
CIContext對象的圖像大小限制取決于Core Image是使用CPU還是GPU。使用方法inputImageMaximumSize和outputImageMaximumSize檢查限制。
-
-
盡可能使用小的圖像。
- 性能與輸出像素數(shù)量成比例。你可以把Core Image渲染成更小的視圖,紋理或者幀緩沖區(qū)。允許Core Animation顯示大小。
- 使用
Core Graphics或Image I/O函數(shù)來裁剪或縮小比例,如函數(shù)CGImageCreateWithImageInRect或CGImageSourceCreateThumbnailAtIndex。
-
UIImageView類最適合靜態(tài)圖像。- 如果您的App需要獲得最佳性能,請使用較低級別的API。
避免CPU和GPU之間不必要的紋理傳輸。
在應(yīng)用內(nèi)容比例因子之前,渲染到與源圖像大小相同的矩形。
-
考慮使用更簡單的過濾器,可以產(chǎn)生類似于算法過濾器的結(jié)果。
- 例如,
CIColorCube可以產(chǎn)生類似于CISepiaTone的輸出,并且可以更高效地完成輸出。
- 例如,
-
利用iOS 6.0及更高版本中對YUV圖像的支持。
- 相機像素緩沖區(qū)本來就是
YUV,但大多數(shù)圖像處理算法需要RBGA數(shù)據(jù)。 兩者之間的轉(zhuǎn)換是有成本的。 Core Image支持從CVPixelBuffer對象讀取YUB并應(yīng)用適當?shù)念伾D(zhuǎn)換。
- 相機像素緩沖區(qū)本來就是
options = @{(id)kCVPixelBufferPixelFormatTypeKey :
@(kCVPixelFormatType_420YpCbCr88iPlanarFullRange) };
Does Your App Need Color Management? - 你的App需要顏色管理嗎?
默認情況下,Core Image應(yīng)用光線性色彩空間中的所有濾鏡。 這提供了最準確和一致的結(jié)果。
sRGB之間的轉(zhuǎn)換增加了過濾器的復(fù)雜性,并要求Core Image應(yīng)用這些等式:
rgb = mix(rgb.0.0774, pow(rgb*0.9479 + 0.05213, 2.4), step(0.04045, rgb))
rgb = mix(rgb12.92, pow(rgb*0.4167) * 1.055 - 0.055, step(0.00313, rgb))
考慮禁用色彩管理,如果:
- 您的應(yīng)用需要絕對最高的性能。
- 增加操作后,用戶不會注意到質(zhì)量差異。
要禁用色彩管理,請將kCIImageColorSpace項設(shè)置為null。 如果您正在使用EAGL上下文,那么在創(chuàng)建EAGL上下文時也要將上下文的顏色空間設(shè)置為null。 請參閱Building Your Own Workflow with a Core Image Context。
后記
本篇已結(jié)束,后面還有哦~~~
