版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2018.01.28 |
前言
Core Image是IOS5中新加入的一個(gè)框架挠乳,里面提供了強(qiáng)大高效的圖像處理功能,用來對(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
查詢系統(tǒng)中的過濾器
Core Image提供的方法可以讓您查詢系統(tǒng)中可用的內(nèi)置過濾器以及每個(gè)過濾器的顯示名稱,輸入?yún)?shù),參數(shù)類型,默認(rèn)值等的相關(guān)信息。 查詢系統(tǒng)可為您提供有關(guān)可用過濾器的最新信息。 如果您的應(yīng)用支持讓用戶選擇并設(shè)置過濾器,則可以在為過濾器創(chuàng)建用戶界面時(shí)使用此信息。
Getting a List of Filters and Attributes - 獲取過濾器和屬性的列表
使用filterNamesInCategory:和filterNamesInCategories:方法來精確地發(fā)現(xiàn)哪些過濾器可用。 過濾器被分類以使列表更易于管理。 如果您知道過濾器類別陨簇,則可以通過調(diào)用filterNamesInCategory:方法找到該類別可用的過濾器:并提供Table 4-1葵姥,Table 4-2或Table 4-3中列出的一個(gè)類別常量削咆。
如果要查找類別列表的所有可用過濾器瞻惋,可以調(diào)用filterNamesInCategories:方法羽峰,提供從表中列出的類別常量數(shù)組坯汤。 該方法返回一個(gè)NSArray對(duì)象,填充每個(gè)類別的過濾器名稱。 您可以通過提供nil而不是類別常量數(shù)組來獲得所有類別的所有過濾器的列表。
過濾器可以是多個(gè)類別category
的成員。 一個(gè)類別可以指定:
- 濾鏡產(chǎn)生的效果類型(顏色調(diào)整寝贡,失真等等)价说。 見Table 4-1。
- 過濾器的使用(靜止圖像惦费,視頻鞍匾,高動(dòng)態(tài)范圍等)符糊。 見Table 4-2围橡。
- 過濾器是否由Core Image提供(內(nèi)置)塞赂。 見 Table 4-3讹剔。
獲取過濾器名稱列表后贰镣,您可以通過創(chuàng)建CIFilter
對(duì)象并調(diào)用方法attributes來檢索過濾器的屬性,如下所示:
CIFilter *myFilter = [CIFilter filterWithName:@"<# Filter Name Here #>"];
NSDictionary *myFilterAttributes = [myFilter attributes];
您將字符串“<#Filter Name Here#>”
替換為您感興趣的過濾器的名稱苔埋。屬性包括名稱,類別,類瓮栗,最小值和最大值等进陡。 請(qǐng)參閱CIFilter Class Reference以獲取可返回的屬性的完整列表丛肮。
Building a Dictionary of Filters - 構(gòu)建一個(gè)濾波器字典
如果您的App提供用戶界面,則可以查閱過濾器字典來創(chuàng)建和更新用戶界面。 例如逻澳,布爾型的過濾器屬性需要復(fù)選框或類似的用戶界面元素,而在一定范圍內(nèi)連續(xù)變化的屬性可以使用滑塊斜做。 您可以使用最大值和最小值作為文本標(biāo)簽的基礎(chǔ)苞氮。 默認(rèn)屬性設(shè)置將決定用戶界面中的初始設(shè)置。
過濾器名稱和屬性提供了構(gòu)建用戶界面所需的所有信息瓤逼,以允許用戶選擇過濾器并控制其輸入?yún)?shù)笼吟。 過濾器的屬性告訴您過濾器有多少個(gè)輸入?yún)?shù)库物,參數(shù)名稱,數(shù)據(jù)類型以及最小值贷帮,最大值和默認(rèn)值戚揭。
Note: If you are interested in building a user interface for a Core Image filter, see IKFilterUIView Class Reference, which provides a view that contains input parameter controls for a Core Image filter. 注意:如果您有興趣為Core Image過濾器構(gòu)建用戶界面,請(qǐng)參閱 IKFilterUIView Class Reference撵枢,該參考提供了一個(gè)包含Core Image過濾器的輸入?yún)?shù)控件的視圖民晒。
Listing 4-1顯示了獲取過濾器名稱并通過功能類別構(gòu)建過濾器字典的代碼。 代碼檢索這些類別中的過濾器(kCICategoryGeometryAdjustment锄禽,kCICategoryDistortionEffect潜必,kCICategorySharpen和kCICategoryBlur)
,但會(huì)根據(jù)App定義的功能類別(如Distortion和Focus)構(gòu)建字典沃但。 功能類別可用于在菜單中組織過濾器名稱刮便,這對(duì)用戶來說是有意義的。 該代碼不會(huì)遍歷所有可能的Core Image過濾器類別绽慈,但您可以通過遵循相同的過程輕松地?cái)U(kuò)展此代碼。
// Listing 4-1 Code that builds a dictionary of filters by functional categories
NSMutableDictionary *filtersByCategory = [NSMutableDictionary dictionary];
NSMutableArray *filterNames = [NSMutableArray array];
[filterNames addObjectsFromArray:
[CIFilter filterNamesInCategory:kCICategoryGeometryAdjustment]];
[filterNames addObjectsFromArray:
[CIFilter filterNamesInCategory:kCICategoryDistortionEffect]];
filtersByCategory[@"Distortion"] = [self buildFilterDictionary: filterNames];
[filterNames removeAllObjects];
[filterNames addObjectsFromArray:
[CIFilter filterNamesInCategory:kCICategorySharpen]];
[filterNames addObjectsFromArray:
[CIFilter filterNamesInCategory:kCICategoryBlur]];
filtersByCategory[@"Focus"] = [self buildFilterDictionary: filterNames];
Listing 4-2顯示了Listing 4-1中調(diào)用的buildFilterDictionary
例程辈毯。 此例程為功能類別中的每個(gè)過濾器構(gòu)建一個(gè)屬性字典坝疼。 列表中的每一行代碼都有詳細(xì)的解釋。
// Listing 4-2 Building a dictionary of filters by functional name
- (NSMutableDictionary *)buildFilterDictionary:(NSArray *)filterClassNames // 1
{
NSMutableDictionary *filters = [NSMutableDictionary dictionary];
for (NSString *className in filterClassNames) { // 2
CIFilter *filter = [CIFilter filterWithName:className]; // 3
if (filter) {
filters[className] = [filter attributes]; // 4
} else {
NSLog(@"could not create '%@' filter", className);
}
}
return filters;
}
代碼如下:
- 將一組過濾器名稱作為輸入?yún)?shù)谆沃。 回憶一下 Listing 4-1钝凶,這個(gè)數(shù)組可以是來自多個(gè)Core Image過濾器類別的過濾器名稱的連接。 在這個(gè)例子中唁影,數(shù)組是基于App設(shè)置的功能類別(失真或焦點(diǎn))耕陷。
- 遍歷過濾器名稱數(shù)組。
- 檢索過濾器名稱的過濾器對(duì)象据沈。
- 檢索過濾器的屬性字典并將其添加到由例程返回的字典中哟沫。
Note: Apps that run in OS X v10.5 and later can use the CIFilter Image Kit additions to provide a filter browser and a view for setting filter input parameters. See CIFilter Image Kit Additions and ImageKit Programming Guide. 注意:在OS X v10.5及更高版本中運(yùn)行的App可以使用
CIFilter Image Kit
附加組件來提供過濾器瀏覽和用于設(shè)置過濾器輸入?yún)?shù)的視圖。 請(qǐng)參閱CIFilter Image Kit Additions
和ImageKit Programming Guide
锌介。
后記
本篇已結(jié)束嗜诀,后面更精彩~~~