Core Image程式設計指南翻譯七(獲得最佳效能)
Core Image提供了許多用於建立影象,上下文和渲染內容的選項。您如何選擇完成任務取決於:
- 您的應用需要多長時間執行一項任務
- 您的應用是否適用於靜態或視訊影象
- 是否需要支援實時處理或分析
- 色彩保真度對您的使用者有多重要
您應該閱讀效能最佳實踐,以確保您的應用程式儘可能高效地執行。
效能最佳實踐
遵循這些做法以獲得最佳效能:
- CIContext每次渲染時都不要建立物件。
上下文儲存了大量的狀態資訊; 重用它們更有效。
- 評估您的應用是否需要色彩管理。除非您需要,否則不要使用它。看看你的應用需要色彩管理嗎?
- 在CIImage使用GPU上下文渲染物件時避免使用Core Animation動畫。
如果您需要同時使用兩者,則可以將兩者都設定為使用CPU。
- 確保影象不超過CPU和GPU限制。
CIContext物件的影象大小限制因Core Image是使用CPU還是GPU而異。使用方法inputImageMaximumSize和檢查限制outputImageMaximumSize。
- 儘可能使用較小的影象。
效能隨輸出畫素數量而變化。您可以將Core Image渲染為較小的檢視,紋理或幀緩衝區。允許Core Animation升級以顯示大小。
使用Core Graphics或Image I / O函式進行裁剪或縮減取樣,例如函式CGImageCreateWithImageInRect或CGImageSourceCreateThumbnailAtIndex。
在UIImageView類的工作最好的靜態影象。
如果您的應用需要獲得最佳效能,請使用較低階別的API。避免CPU和GPU之間不必要的紋理傳輸。
在應用內容比例因子之前,渲染到與源影象大小相同的矩形。
考慮使用更簡單的過濾器,它可以產生類似於演算法過濾器的結果。
例如,CIColorCube可以產生類似於CISepiaTone的輸出,並且可以更有效地完成。
- 利用iOS 6.0及更高版本中對YUV影象的支援。
相機畫素緩衝區本身就是YUV,但大多數影象處理演算法都需要RBGA資料。在兩者之間進行轉換需要付出代價。Core Image支援從CVPixelBuffer物件讀取YUB 並應用適當的顏色轉換。
options = @ {(id)kCVPixelBufferPixelFormatTypeKey:
@(kCVPixelFormatType_420YpCbCr88iPlanarFullRange)};
您的應用需要色彩管理嗎?
預設情況下,Core Image會將所有濾鏡應用於淺色線性色彩空間。這提供了最準確和一致的結果。
轉換為sRGB和從sRGB轉換會增加過濾器的複雜性,並要求Core Image應用這些等式:
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))
在以下情況下考慮禁用顏色管理
- 您的應用需要絕對最高的效能。
- 誇大的操作後,使用者不會注意到質量差異。
要禁用顏色管理,請將kCIImageColorSpace金鑰設定為null。如果您正在使用EAGL上下文,還要在建立EAGL上下文時將上下文顏色空間設定為null。請參閱使用CoreImage上下文構建自己的工作流。
相關文章
- 程式設計=翻譯?程式設計
- Core Text 程式設計指南程式設計
- <<Modern CMake>> 翻譯 2.2 CMake 程式設計程式設計
- 程式設計之道(1987) - Geoffrey James翻譯程式設計
- 翻譯:《實用的Python程式設計》InstructorNotesPython程式設計Struct
- 『翻譯』JavaScript 函數語言程式設計JavaScript函數程式設計
- 提高程式設計能力的關鍵(翻譯)程式設計
- 使用 .NET Core 高效能併發程式設計程式設計
- 谷歌翻譯的UI設計谷歌UI
- 【翻譯】iOS 檢視的程式設計指導(一)iOS程式設計
- [翻譯]返回導向程式設計例項入門程式設計
- OpenCV Core functionality翻譯總結OpenCVFunction
- [翻譯]EntityFramework Core 2.2 釋出Framework
- [翻譯]Windows Exploit開發系列教程第七部分:返回導向程式設計(ROP)Windows程式設計
- 程式設計技巧整理:Java程式效能最佳化總結!程式設計Java
- 翻譯:《實用的Python程式設計》02_04_SequencesPython程式設計
- 翻譯:《實用的Python程式設計》02_01_DatatypesPython程式設計
- 翻譯:《實用的Python程式設計》02_02_ContainersPython程式設計AI
- 翻譯:《實用的Python程式設計》04_02_InheritancePython程式設計
- 翻譯:《實用的Python程式設計》04_00_OverviewPython程式設計View
- 翻譯:《實用的Python程式設計》04_01_ClassPython程式設計
- 翻譯:《實用的Python程式設計》03_04_ModulesPython程式設計
- 翻譯:《實用的Python程式設計》03_01_ScriptPython程式設計
- 翻譯:《實用的Python程式設計》09_01_PackagesPython程式設計Package
- 翻譯:《實用的Python程式設計》08_01_TestingPython程式設計
- 翻譯:《實用的Python程式設計》08_02_LoggingPython程式設計
- 翻譯:《實用的Python程式設計》08_03_DebuggingPython程式設計
- 翻譯:《實用的Python程式設計》01_06_FilesPython程式設計
- 翻譯:《實用的Python程式設計》01_07_FunctionsPython程式設計Function
- 翻譯:《實用的Python程式設計》01_03_NumbersPython程式設計
- 翻譯:《實用的Python程式設計》01_04_StringsPython程式設計
- [翻譯] Grid 佈局完全指南
- [譯]AppExtension程式設計指南:擴充套件基礎4APP程式設計套件
- [譯]AppExtension程式設計指南:擴充套件基礎1APP程式設計套件
- [譯]AppExtension程式設計指南:擴充套件基礎2APP程式設計套件
- [譯]AppExtension程式設計指南:擴充套件基礎3APP程式設計套件
- [譯] 為 JavaScript 程式設計師準備的 Flutter 指南JavaScript程式設計師Flutter
- 【翻譯】編寫程式碼註釋的最佳實踐