版本記錄
| 版本號 | 時間 |
|---|---|
| V1.0 | 2018.01.29 |
前言
Core Image是IOS5中新加入的一個框架,里面提供了強大高效的圖像處理功能,用來對基于像素的圖像進行操作與分析。還提供了很多強大的濾鏡,可以實現(xiàn)你想要的效果,下面我們就一起解析一下這個框架。感興趣的可以參考上面幾篇。
1. Core Image框架詳細解析(一) —— 基本概覽
2. Core Image框架詳細解析(二) —— Core Image濾波器參考
3. Core Image框架詳細解析(三) —— 關于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(二)
11. Core Image框架詳細解析(十一) —— 獲得最佳性能 Getting the Best Performance
12. Core Image框架詳細解析(十二) —— 使用反饋處理圖像 Using Feedback to Process Images
13. Core Image框架詳細解析(十三) —— 在寫一個自定義濾波器之前你需要知道什么?
14. Core Image框架詳細解析(十四) —— 創(chuàng)建自定義濾波器 Creating Custom Filters(一)
15. Core Image框架詳細解析(十五) —— 創(chuàng)建自定義濾波器 Creating Custom Filters(二)
Packaging and Loading Image Units - 包裝和加載圖像單元
圖像單元表示Core Image過濾器的插件體系結(jié)構(gòu)。 圖像單元使用NSBundle類作為打包機制,允許您將創(chuàng)建的過濾器提供給其他應用程序。 圖像單元可以包含可執(zhí)行或不可執(zhí)行的過濾器。 (有關詳細信息,請參閱Executable and Nonexecutable Filters。)
要從自定義過濾器創(chuàng)建圖像單元,您必須執(zhí)行以下任務:
- 按照Creating a Custom Filter中的說明書寫過濾器。
- Create an Image Unit Project in Xcode在Xcode中創(chuàng)建一個圖像單元項目。
- Add Your Filter Files to the Project將您的篩選文件添加到項目。
- Customize the Load Method自定義加載方法。
- Modify the Description Property List修改描述屬性列表。
- Build and Test the Image Unit建立和測試圖像單元
閱讀完本章之后,你可能也想
- 閱讀Image Unit Tutorial 深入了解編寫內(nèi)核和創(chuàng)建圖像單元的信息。
- 訪問Apple的Image Units Licensing and Trademarks webpage,了解如何驗證圖像單元并獲取圖像單元logo。
Before You Get Started - 在你開始前
下載CIDemoImageUnit示例。 當你創(chuàng)建一個圖像單元時,你應該有類似的文件。 這個圖像單元包含一個過濾器FunHouseMirror。 圖像單元中的每個過濾器通常都有三個文件:過濾器類的接口文件,關聯(lián)的實現(xiàn)文件和內(nèi)核文件。 正如你可以在示例代碼項目中看到的那樣,FunHouseMirror過濾器是這樣的:FunHouseMirrorFilter.h,F(xiàn)unHouseMirrorFilter.m和funHouseMirror.cikernel。
每個圖像單元還應該具有CIPlugInRegistration協(xié)議的接口和實現(xiàn)文件。 在該圖中,請參閱MyPlugInLoader.h和MyPlugInLoader.m。 您需要修改的另一個重要文件是Description.plist文件。
現(xiàn)在,您已經(jīng)了解了一些圖像單元項目中的文件,現(xiàn)在可以創(chuàng)建一個。
Create an Image Unit Project in Xcode - 在Xcode中創(chuàng)建一個圖像單元項目
Xcode提供了一個創(chuàng)建圖像單元的模板。 在創(chuàng)建一個圖像單元項目之后,您將擁有大部分需要開始的文件,并且該項目將鏈接到適當?shù)目蚣堋?/p>
在Xcode中創(chuàng)建一個圖像單元項目
- 啟動Xcode并選擇
File> New Project。 - 在模板窗口中,選擇
System Plug-in > Image Unit Plug-in。 然后點擊下一步。 - 命名圖像單元項目,然后單擊完成。
項目窗口隨著創(chuàng)建的這些文件打開:
-
MyImageUnitPlugInLoader.h和MyImageUnitPlugInLoader.m,CIPlugInRegistration協(xié)議的接口和實現(xiàn)文件 -
MyImageUnitFilter.h和MyImageUnitFilter.m MyImageUnitFilterKernel.cikernel
圖像單元項目中提供的MyImageUnitKernelFilter.cikernel文件是一個示例內(nèi)核文件。 如果你已經(jīng)創(chuàng)建了一個過濾器,你將不需要這個文件,所以你可以刪除它。 你會在短時間內(nèi)將自己添加到項目中。
Customize the Load Method - 自定義加載方法
打開實施CIPlugInRegistration協(xié)議的文件。 在其中你會發(fā)現(xiàn)一個load方法,如Listing 10-1所示。 您可以選擇向此方法添加代碼以執(zhí)行所需的任何初始化,例如注冊檢查。 如果過濾器已成功加載,則該方法返回true。 如果您不需要任何自定義初始化,則可以保持原樣裝入方法。
Listing 10-1 The load method provided by the image unit template
-(BOOL)load:(void*)host
{
// Custom image unit initialization code goes here
return YES;
}
如果需要,可以編寫unload方法來執(zhí)行過濾器可能需要的任何清理任務。
Add Your Filter Files to the Project - 將您的篩選文件添加到項目
將之前創(chuàng)建的過濾器文件添加到圖像單元項目。 回想一下,您將需要每個過濾器和關聯(lián)的內(nèi)核文件的接口和實現(xiàn)文件。 如果尚未編寫過濾器,請參閱Creating Custom Filters。
請記住,您可以在一個圖像單元中打包多個過濾器,并且可以為過濾器提供所需的多個內(nèi)核文件。 只要確保包含了要打包的所有篩選器和內(nèi)核文件。
Modify the Description Property List - 修改描述屬性列表
對于可執(zhí)行過濾器,只能從Description.plist文件中讀取版本號,過濾器類和過濾器名稱。 您可以在代碼中提供過濾器的屬性列表(請參閱Write a Custom Attributes Method)。 您需要檢查圖像單元模板中提供的Description.plist文件,確保過濾器名稱正確并輸入版本號。
對于CPU不可執(zhí)行的過濾器,圖像單元主機將讀取Description.plist文件以獲取有關表10-1中列出的過濾器屬性的信息。 您需要修改Description.plist文件,使其包含適當?shù)男畔ⅰ?(有關過濾器鍵的信息,另請參閱Core Image Reference Collection)。

Table 10-2列出了輸入?yún)?shù)類和與每個類關聯(lián)的值。 對于不可執(zhí)行的過濾器,可以為每個輸入和輸出參數(shù)提供參數(shù)類別。

Build and Test the Image Unit - 建立和測試圖像單元
在開始創(chuàng)建圖像單元之前,您應該測試內(nèi)核代碼以確保其正常工作。 (請參閱 Use Quartz Composer to Test the Kernel Routine。),成功構(gòu)建圖像單元后,您需要將其復制到以下目錄:
/Library/Graphics/Image Units~/Library/Graphics/Image Units
然后,您應嘗試從應用程序中加載圖像單元,并使用包裝在單元中的過濾器(或多個過濾器)。 請參閱 Loading Image Units,Querying the System for Filters和 Processing Images。
Loading Image Units - 加載圖像單元
Apple提供的內(nèi)置過濾器會自動加載。 您需要加載的唯一過濾器是打包成圖像單元的第三方過濾器。 一個簡單的圖像單元可以包含一個或多個圖像處理過濾器。 如果圖像單元安裝在Build and Test the Image Unit中討論的位置之一中,則可由任何調(diào)用CIPlugin類提供的load方法之一的應用程序使用,如表10-3所示。 您只需要加載一次圖像單位。 例如,要加載所有全局安裝的圖像單元,可以將以下代碼行添加到應用程序的初始化例程中。
[CIPlugIn loadAllPlugIns];
調(diào)用load方法后,您將繼續(xù)使用Apple提供的任何圖像處理過濾器。 按照本章其余部分的說明進行操作。

See Also - 也可參考
- Image Unit Tutorial(圖像單元教程)提供了編寫各種內(nèi)核的步驟說明,并將它們打包為圖像單元。
- CIDemoImageUnit是一個示例圖像單元Xcode項目。
后記
本篇已完成,后面更精彩~~~
