Core Image框架詳細(xì)解析(八) —— 查詢系統(tǒng)中的過濾器 Querying the System for Filters

版本記錄

版本號(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 AdditionsImageKit Programming Guide锌介。

后記

本篇已結(jié)束嗜诀,后面更精彩~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市孔祸,隨后出現(xiàn)的幾起案子隆敢,更是在濱河造成了極大的恐慌,老刑警劉巖崔慧,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拂蝎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡惶室,警方通過查閱死者的電腦和手機(jī)温自,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門玄货,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人捣作,你說我怎么就攤上這事誉结。” “怎么了券躁?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵惩坑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我也拜,道長(zhǎng)以舒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任慢哈,我火速辦了婚禮蔓钟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘卵贱。我一直安慰自己滥沫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布键俱。 她就那樣靜靜地躺著兰绣,像睡著了一般。 火紅的嫁衣襯著肌膚如雪编振。 梳的紋絲不亂的頭發(fā)上缀辩,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音踪央,去河邊找鬼臀玄。 笑死,一個(gè)胖子當(dāng)著我的面吹牛畅蹂,可吹牛的內(nèi)容都是我干的健无。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼液斜,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼睬涧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起旗唁,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤畦浓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后检疫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體讶请,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夺溢。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片论巍。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖风响,靈堂內(nèi)的尸體忽然破棺而出嘉汰,到底是詐尸還是另有隱情,我是刑警寧澤状勤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布鞋怀,位于F島的核電站,受9級(jí)特大地震影響持搜,放射性物質(zhì)發(fā)生泄漏密似。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一葫盼、第九天 我趴在偏房一處隱蔽的房頂上張望残腌。 院中可真熱鬧,春花似錦贫导、人聲如沸抛猫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽闺金。三九已至,卻和暖如春钱反,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背匣距。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工面哥, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人毅待。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓尚卫,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親尸红。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吱涉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容