版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2018.01.29 |
前言
Core Image是IOS5中新加入的一個(gè)框架扫茅,里面提供了強(qiáng)大高效的圖像處理功能,用來(lái)對(duì)基于像素的圖像進(jìn)行操作與分析育瓜。還提供了很多強(qiáng)大的濾鏡葫隙,可以實(shí)現(xiàn)你想要的效果,下面我們就一起解析一下這個(gè)框架躏仇。感興趣的可以參考上面幾篇恋脚。
1. Core Image框架詳細(xì)解析(一) —— 基本概覽
2. Core Image框架詳細(xì)解析(二) —— Core Image濾波器參考
3. Core Image框架詳細(xì)解析(三) —— 關(guān)于Core Image
4. Core Image框架詳細(xì)解析(四) —— Processing Images處理圖像(一)
5. Core Image框架詳細(xì)解析(五) —— Processing Images處理圖像(二)
6. Core Image框架詳細(xì)解析(六) —— 圖像中的面部識(shí)別Detecting Faces in an Image(一)
7. Core Image框架詳細(xì)解析(七) —— 自動(dòng)增強(qiáng)圖像 Auto Enhancing Images
8. Core Image框架詳細(xì)解析(八) —— 查詢系統(tǒng)中的過(guò)濾器 Querying the System for Filters
9. Core Image框架詳細(xì)解析(九) —— 子類化CIFilter:自定義效果的配方 Subclassing CIFilter: Recipes for Custom Effects(一)
10. Core Image框架詳細(xì)解析(十) —— 子類化CIFilter:自定義效果的配方 Subclassing CIFilter: Recipes for Custom Effects(二)
11. Core Image框架詳細(xì)解析(十一) —— 獲得最佳性能 Getting the Best Performance
12. Core Image框架詳細(xì)解析(十二) —— 使用反饋處理圖像 Using Feedback to Process Images
13. Core Image框架詳細(xì)解析(十三) —— 在寫一個(gè)自定義濾波器之前你需要知道什么?
14. Core Image框架詳細(xì)解析(十四) —— 創(chuàng)建自定義濾波器 Creating Custom Filters(一)
15. Core Image框架詳細(xì)解析(十五) —— 創(chuàng)建自定義濾波器 Creating Custom Filters(二)
Packaging and Loading Image Units - 包裝和加載圖像單元
圖像單元表示Core Image過(guò)濾器的插件體系結(jié)構(gòu)钙态。 圖像單元使用NSBundle類作為打包機(jī)制慧起,允許您將創(chuàng)建的過(guò)濾器提供給其他應(yīng)用程序。 圖像單元可以包含可執(zhí)行或不可執(zhí)行的過(guò)濾器册倒。 (有關(guān)詳細(xì)信息蚓挤,請(qǐng)參閱Executable and Nonexecutable Filters。)
要從自定義過(guò)濾器創(chuàng)建圖像單元驻子,您必須執(zhí)行以下任務(wù):
- 按照Creating a Custom Filter中的說(shuō)明書寫過(guò)濾器灿意。
- Create an Image Unit Project in Xcode在Xcode中創(chuàng)建一個(gè)圖像單元項(xiàng)目。
- Add Your Filter Files to the Project將您的篩選文件添加到項(xiàng)目崇呵。
- Customize the Load Method自定義加載方法缤剧。
- Modify the Description Property List修改描述屬性列表。
- Build and Test the Image Unit建立和測(cè)試圖像單元
閱讀完本章之后域慷,你可能也想
- 閱讀Image Unit Tutorial 深入了解編寫內(nèi)核和創(chuàng)建圖像單元的信息荒辕。
- 訪問(wèn)Apple的Image Units Licensing and Trademarks webpage汗销,了解如何驗(yàn)證圖像單元并獲取圖像單元logo。
Before You Get Started - 在你開始前
下載CIDemoImageUnit示例抵窒。 當(dāng)你創(chuàng)建一個(gè)圖像單元時(shí)弛针,你應(yīng)該有類似的文件。 這個(gè)圖像單元包含一個(gè)過(guò)濾器FunHouseMirror
李皇。 圖像單元中的每個(gè)過(guò)濾器通常都有三個(gè)文件:過(guò)濾器類的接口文件削茁,關(guān)聯(lián)的實(shí)現(xiàn)文件和內(nèi)核文件。 正如你可以在示例代碼項(xiàng)目中看到的那樣掉房,FunHouseMirror
過(guò)濾器是這樣的:FunHouseMirrorFilter.h茧跋,F(xiàn)unHouseMirrorFilter.m和funHouseMirror.cikernel
。
每個(gè)圖像單元還應(yīng)該具有CIPlugInRegistration
協(xié)議的接口和實(shí)現(xiàn)文件卓囚。 在該圖中瘾杭,請(qǐng)參閱MyPlugInLoader.h
和MyPlugInLoader.m
。 您需要修改的另一個(gè)重要文件是Description.plist
文件捍岳。
現(xiàn)在富寿,您已經(jīng)了解了一些圖像單元項(xiàng)目中的文件,現(xiàn)在可以創(chuàng)建一個(gè)。
Create an Image Unit Project in Xcode - 在Xcode中創(chuàng)建一個(gè)圖像單元項(xiàng)目
Xcode提供了一個(gè)創(chuàng)建圖像單元的模板刃滓。 在創(chuàng)建一個(gè)圖像單元項(xiàng)目之后艳汽,您將擁有大部分需要開始的文件,并且該項(xiàng)目將鏈接到適當(dāng)?shù)目蚣堋?/p>
在Xcode中創(chuàng)建一個(gè)圖像單元項(xiàng)目
- 啟動(dòng)Xcode并選擇
File> New Project
络凿。 - 在模板窗口中,選擇
System Plug-in > Image Unit Plug-in
。 然后點(diǎn)擊下一步贴唇。 - 命名圖像單元項(xiàng)目,然后單擊完成飞袋。
項(xiàng)目窗口隨著創(chuàng)建的這些文件打開:
-
MyImageUnitPlugInLoader.h
和MyImageUnitPlugInLoader.m
戳气,CIPlugInRegistration
協(xié)議的接口和實(shí)現(xiàn)文件 -
MyImageUnitFilter.h
和MyImageUnitFilter.m
MyImageUnitFilterKernel.cikernel
圖像單元項(xiàng)目中提供的MyImageUnitKernelFilter.cikernel
文件是一個(gè)示例內(nèi)核文件。 如果你已經(jīng)創(chuàng)建了一個(gè)過(guò)濾器巧鸭,你將不需要這個(gè)文件瓶您,所以你可以刪除它。 你會(huì)在短時(shí)間內(nèi)將自己添加到項(xiàng)目中纲仍。
Customize the Load Method - 自定義加載方法
打開實(shí)施CIPlugInRegistration
協(xié)議的文件呀袱。 在其中你會(huì)發(fā)現(xiàn)一個(gè)load
方法,如Listing 10-1所示郑叠。 您可以選擇向此方法添加代碼以執(zhí)行所需的任何初始化夜赵,例如注冊(cè)檢查。 如果過(guò)濾器已成功加載乡革,則該方法返回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
方法來(lái)執(zhí)行過(guò)濾器可能需要的任何清理任務(wù)歌豺。
Add Your Filter Files to the Project - 將您的篩選文件添加到項(xiàng)目
將之前創(chuàng)建的過(guò)濾器文件添加到圖像單元項(xiàng)目。 回想一下心包,您將需要每個(gè)過(guò)濾器和關(guān)聯(lián)的內(nèi)核文件的接口和實(shí)現(xiàn)文件类咧。 如果尚未編寫過(guò)濾器,請(qǐng)參閱Creating Custom Filters蟹腾。
請(qǐng)記住痕惋,您可以在一個(gè)圖像單元中打包多個(gè)過(guò)濾器,并且可以為過(guò)濾器提供所需的多個(gè)內(nèi)核文件娃殖。 只要確保包含了要打包的所有篩選器和內(nèi)核文件值戳。
Modify the Description Property List - 修改描述屬性列表
對(duì)于可執(zhí)行過(guò)濾器,只能從Description.plist
文件中讀取版本號(hào)炉爆,過(guò)濾器類和過(guò)濾器名稱堕虹。 您可以在代碼中提供過(guò)濾器的屬性列表(請(qǐng)參閱Write a Custom Attributes Method)。 您需要檢查圖像單元模板中提供的Description.plist
文件芬首,確保過(guò)濾器名稱正確并輸入版本號(hào)赴捞。
對(duì)于CPU不可執(zhí)行的過(guò)濾器,圖像單元主機(jī)將讀取Description.plist
文件以獲取有關(guān)表10-1中列出的過(guò)濾器屬性的信息郁稍。 您需要修改Description.plist
文件赦政,使其包含適當(dāng)?shù)男畔ⅰ?(有關(guān)過(guò)濾器鍵的信息,另請(qǐng)參閱Core Image Reference Collection)耀怜。
Table 10-2列出了輸入?yún)?shù)類和與每個(gè)類關(guān)聯(lián)的值恢着。 對(duì)于不可執(zhí)行的過(guò)濾器,可以為每個(gè)輸入和輸出參數(shù)提供參數(shù)類別财破。
Build and Test the Image Unit - 建立和測(cè)試圖像單元
在開始創(chuàng)建圖像單元之前掰派,您應(yīng)該測(cè)試內(nèi)核代碼以確保其正常工作。 (請(qǐng)參閱 Use Quartz Composer to Test the Kernel Routine左痢。)靡羡,成功構(gòu)建圖像單元后,您需要將其復(fù)制到以下目錄:
/Library/Graphics/Image Units
~/Library/Graphics/Image Units
然后抖锥,您應(yīng)嘗試從應(yīng)用程序中加載圖像單元亿眠,并使用包裝在單元中的過(guò)濾器(或多個(gè)過(guò)濾器)。 請(qǐng)參閱 Loading Image Units磅废,Querying the System for Filters和 Processing Images纳像。
Loading Image Units - 加載圖像單元
Apple提供的內(nèi)置過(guò)濾器會(huì)自動(dòng)加載。 您需要加載的唯一過(guò)濾器是打包成圖像單元的第三方過(guò)濾器拯勉。 一個(gè)簡(jiǎn)單的圖像單元可以包含一個(gè)或多個(gè)圖像處理過(guò)濾器竟趾。 如果圖像單元安裝在Build and Test the Image Unit中討論的位置之一中憔购,則可由任何調(diào)用CIPlugin
類提供的load
方法之一的應(yīng)用程序使用,如表10-3所示岔帽。 您只需要加載一次圖像單位玫鸟。 例如,要加載所有全局安裝的圖像單元犀勒,可以將以下代碼行添加到應(yīng)用程序的初始化例程中屎飘。
[CIPlugIn loadAllPlugIns];
調(diào)用load
方法后,您將繼續(xù)使用Apple提供的任何圖像處理過(guò)濾器贾费。 按照本章其余部分的說(shuō)明進(jìn)行操作钦购。
See Also - 也可參考
- Image Unit Tutorial(圖像單元教程)提供了編寫各種內(nèi)核的步驟說(shuō)明,并將它們打包為圖像單元褂萧。
- CIDemoImageUnit是一個(gè)示例圖像單元Xcode項(xiàng)目押桃。
后記
本篇已完成,后面更精彩~~~