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翻譯程式設計
- 『翻譯』JavaScript 函數語言程式設計JavaScript函數程式設計
- [翻譯]Bob大叔:反思極限程式設計程式設計
- Core Foundation 官方文件翻譯
- 如何獲得Oracle系統效能統計?Oracle
- Google C++程式設計風格指南(七):格式GoC++程式設計
- 適用於iOS的應用程式程式設計指南(七)iOS程式設計
- 提高程式設計能力的關鍵(翻譯)程式設計
- DirectShow應用程式設計介紹(翻譯) (轉)程式設計
- 使用 .NET Core 高效能併發程式設計程式設計
- WCF服務程式設計設計規範(7):WCF最佳實踐《WCFBestPractice》資料下載與翻譯程式設計
- Rust 翻譯計劃——網路程式設計 curl 庫 (上)Rust程式設計
- OpenCV Core functionality翻譯總結OpenCVFunction
- [翻譯]EntityFramework Core 2.2 釋出Framework
- 程式設計師獲得高薪有哪些談判技巧?程式設計師高薪
- 谷歌翻譯的UI設計谷歌UI
- JAVA NIO 翻譯系列(七、FileChannel)Java
- 【翻譯】iOS 檢視的程式設計指導(一)iOS程式設計
- [翻譯]返回導向程式設計例項入門程式設計
- 高效能程式設計師的七個習慣程式設計師
- [譯] 系統設計入門 | 掘金翻譯計劃
- 程式設計技巧整理:Java程式效能最佳化總結!程式設計Java
- [翻譯]Windows Exploit開發系列教程第七部分:返回導向程式設計(ROP)Windows程式設計
- 翻譯:《實用的Python程式設計》InstructorNotesPython程式設計Struct
- TCP程式設計(七)TCP程式設計
- 【翻譯】編寫程式碼註釋的最佳實踐
- [翻譯]高德納(Knuth)談計算機程式設計藝術(下)計算機程式設計
- [翻譯]高德納(Knuth)談計算機程式設計藝術(上)計算機程式設計
- 好程式設計師分享Web前端效能最佳化程式設計師Web前端
- RESTful API 設計指南——最佳實踐RESTAPI
- [譯] 設計師裝腔指南
- [譯]網站設計綜合指南網站
- [譯] 網站設計綜合指南網站
- [譯] 為 JavaScript 程式設計師準備的 Flutter 指南JavaScript程式設計師Flutter
- [譯]函式式響應程式設計入門指南函式程式設計