Core Image框架詳細解析(十六) —— 包裝和載入影像單元 Packaging and Loading Image Units...
版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.01.29 |
前言
Core Image是IOS5中新加入的一個框架,裡面提供了強大高效的影像處理功能,用來對基於畫素的影像進行操作與分析。還提供了很多強大的濾鏡,可以實現你想要的效果,下面我們就一起解析一下這個框架。感興趣的可以參考上面幾篇。
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框架詳細解析(八) —— 查詢系統中的過濾器 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框架詳細解析(十四) —— 建立自定義濾波器 Creating Custom Filters(一)
15. Core Image框架詳細解析(十五) —— 建立自定義濾波器 Creating Custom Filters(二)
Packaging and Loading Image Units - 包裝和載入影像單元
影像單元表示Core Image過濾器的外掛體系結構。 影像單元使用NSBundle類作為打包機制,允許您將建立的過濾器提供給其他應用程式。 影像單元可以包含可執行或不可執行的過濾器。 (有關詳細資訊,請參閱Executable and Nonexecutable Filters。)
要從自定義過濾器建立影像單元,您必須執行以下任務:
- 按照Creating a Custom Filter中的說明書寫過濾器。
- Create an Image Unit Project in Xcode在Xcode中建立一個影像單元專案。
- 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 深入瞭解編寫核心和建立影像單元的資訊。
- 訪問Apple的Image Units Licensing and Trademarks webpage,瞭解如何驗證影像單元並獲取影像單元logo。
Before You Get Started - 在你開始前
下載CIDemoImageUnit示例。 當你建立一個影像單元時,你應該有類似的檔案。 這個影像單元包含一個過濾器FunHouseMirror
。 影像單元中的每個過濾器通常都有三個檔案:過濾器類的介面檔案,關聯的實現檔案和核心檔案。 正如你可以在示例程式碼專案中看到的那樣,FunHouseMirror
過濾器是這樣的:FunHouseMirrorFilter.h,FunHouseMirrorFilter.m和funHouseMirror.cikernel
。
每個影像單元還應該具有CIPlugInRegistration
協議的介面和實現檔案。 在該圖中,請參閱MyPlugInLoader.h
和MyPlugInLoader.m
。 您需要修改的另一個重要檔案是Description.plist
檔案。
現在,您已經瞭解了一些影像單元專案中的檔案,現在可以建立一個。
Create an Image Unit Project in Xcode - 在Xcode中建立一個影像單元專案
Xcode提供了一個建立影像單元的模板。 在建立一個影像單元專案之後,您將擁有大部分需要開始的檔案,並且該專案將連結到適當的框架。
在Xcode中建立一個影像單元專案
- 啟動Xcode並選擇
File> New Project
。 - 在模板視窗中,選擇
System Plug-in > Image Unit Plug-in
。 然後點選下一步。 - 命名影像單元專案,然後單擊完成。
專案視窗隨著建立的這些檔案開啟:
-
MyImageUnitPlugInLoader.h
和MyImageUnitPlugInLoader.m
,CIPlugInRegistration
協議的介面和實現檔案 -
MyImageUnitFilter.h
和MyImageUnitFilter.m
MyImageUnitFilterKernel.cikernel
影像單元專案中提供的MyImageUnitKernelFilter.cikernel
檔案是一個示例核心檔案。 如果你已經建立了一個過濾器,你將不需要這個檔案,所以你可以刪除它。 你會在短時間內將自己新增到專案中。
Customize the Load Method - 自定義載入方法
開啟實施CIPlugInRegistration
協議的檔案。 在其中你會發現一個load
方法,如Listing 10-1所示。 您可以選擇向此方法新增程式碼以執行所需的任何初始化,例如註冊檢查。 如果過濾器已成功載入,則該方法返回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
方法來執行過濾器可能需要的任何清理任務。
Add Your Filter Files to the Project - 將您的篩選檔案新增到專案
將之前建立的過濾器檔案新增到影像單元專案。 回想一下,您將需要每個過濾器和關聯的核心檔案的介面和實現檔案。 如果尚未編寫過濾器,請參閱Creating Custom Filters。
請記住,您可以在一個影像單元中打包多個過濾器,並且可以為過濾器提供所需的多個核心檔案。 只要確保包含了要打包的所有篩選器和核心檔案。
Modify the Description Property List - 修改描述屬性列表
對於可執行過濾器,只能從Description.plist
檔案中讀取版本號,過濾器類和過濾器名稱。 您可以在程式碼中提供過濾器的屬性列表(請參閱Write a Custom Attributes Method)。 您需要檢查影像單元模板中提供的Description.plist
檔案,確保過濾器名稱正確並輸入版本號。
對於CPU不可執行的過濾器,影像單元主機將讀取Description.plist
檔案以獲取有關表10-1中列出的過濾器屬性的資訊。 您需要修改Description.plist
檔案,使其包含適當的資訊。 (有關過濾器鍵的資訊,另請參閱Core Image Reference Collection)。
Table 10-2列出了輸入引數類和與每個類關聯的值。 對於不可執行的過濾器,可以為每個輸入和輸出引數提供引數類別。
Build and Test the Image Unit - 建立和測試影像單元
在開始建立影像單元之前,您應該測試核心程式碼以確保其正常工作。 (請參閱 Use Quartz Composer to Test the Kernel Routine。),成功構建影像單元后,您需要將其複製到以下目錄:
/Library/Graphics/Image Units
~/Library/Graphics/Image Units
然後,您應嘗試從應用程式中載入影像單元,並使用包裝在單元中的過濾器(或多個過濾器)。 請參閱 Loading Image Units,Querying the System for Filters和 Processing Images。
Loading Image Units - 載入影像單元
Apple提供的內建過濾器會自動載入。 您需要載入的唯一過濾器是打包成影像單元的第三方過濾器。 一個簡單的影像單元可以包含一個或多個影像處理過濾器。 如果影像單元安裝在Build and Test the Image Unit中討論的位置之一中,則可由任何呼叫CIPlugin
類提供的load
方法之一的應用程式使用,如表10-3所示。 您只需要載入一次影像單位。 例如,要載入所有全域性安裝的影像單元,可以將以下程式碼行新增到應用程式的初始化例程中。
[CIPlugIn loadAllPlugIns];
呼叫load
方法後,您將繼續使用Apple提供的任何影像處理過濾器。 按照本章其餘部分的說明進行操作。
See Also - 也可參考
- Image Unit Tutorial(影像單元教程)提供了編寫各種核心的步驟說明,並將它們打包為影像單元。
- CIDemoImageUnit是一個示例影像單元Xcode專案。
後記
本篇已完成,後面更精彩~~~
相關文章
- Halcon採集影像Image Acquisition解析UI
- 包、元包和框架(.NET Core 指南)框架
- 影像增強(Image enhancement)
- PhalApi-Image–影像處理API
- Flutter中ui.Image載入探索FlutterUI
- HTML,javascript,image等載入,DOM解析,js執行生命週期HTMLJavaScriptJS
- android-smart-image-view圖片載入簡單使用AndroidView
- ArkUI-Image詳解UI
- Image Resizer for Mac(影像批次轉換工具)Mac
- 【UIL框架】Universal-Image-Loader完全解析(一)之介紹與使用詳解UI框架
- Docker入門01——ImageDocker
- ReactNative Image元件詳解React元件
- WPF Image Image clip EllipseGeometry
- 影像模糊工具:Photo Blur FX - Image Blur for MacMac
- Image Optimizer Pro for Mac(影像壓縮軟體)Mac
- docker建立volume 指定volume 匯出image 匯入imageDocker
- CoreLocation框架詳細解析框架
- Flutter之Text和ImageFlutter
- Windows 11刪除右鍵選單的新建選單的bmp影像(Bitmap image)Windows
- Photo Image Editor Pixelstyle for Mac(影像編輯器)Mac
- Photo Image Editor Pixelstyle for Mac 影像編輯器Mac
- .Net Core 學習筆記1——包、元包、框架筆記框架
- Universal-Image-Loader完全解析(下)
- Universal-Image-Loader完全解析(上)
- 學習筆記(十六):ArkUi-顯示圖片 (Image)筆記UI
- docker imageDocker
- jQuery :imagejQuery
- Image Manipulation
- 手把手教你整合華為Image Kit影像裁剪功能
- WPF Image add watermark and save marked image as jpg
- Android-Universal-Image-Loader 框架使用Android框架
- 【MATLAB Image Processing Toolbox 入門教程九】“匯入、匯出和轉換”之“影像序列和批處理”Matlab
- Hadoop Yarn框架詳細解析HadoopYarn框架
- AFNetworking框架-詳細解析框架
- Flutter中的Image入門講解Flutter
- Flutter元件ImageFlutter元件
- SVG <image>元素SVG
- 工作流Activiti框架中表單的使用!詳細解析內建表單和外接表單的渲染框架