Core Image編程指南翻譯五(查詢濾鏡系統)

示例代碼下載

查詢濾鏡系統

Core Image提供的方法允許您在系統中查詢可用的內置濾鏡以及有關每個濾鏡的顯示名稱,輸入參數,參數類型,默認值等相關信息。查詢系統可為您提供有關可用濾鏡的最新信息。如果您的應用支持讓用戶選擇和設置濾鏡,則可以在為濾鏡創建用戶界面時使用此信息。

獲取濾鏡和屬性列表

使用filterNamesInCategory:和filterNamesInCategories:方法可以準確發現哪些濾鏡可用。濾鏡以使列表的形式被分類更易于管理。如果您知道濾鏡類別,則可以通過調用方法filterNamesInCategory:并提供表4-1,表4-2或表4-3中列出的類別常量之一來找到該類別可用的濾鏡。

如果要查找類別列表的所有可用濾鏡,可以調用該方法filterNamesInCategories:,提供表中列出的類別常量數組。該方法返回一個NSArray填充了每個類別的濾鏡名稱的對象。您可以通過提供nil而不是類別常量數組來獲取所有類別的所有濾鏡的列表。

濾鏡可以是多個類別的成員。類別可以指定:

  • 濾鏡產生的效果類型(顏色調整,扭曲等)。請參閱表4-1。
  • 濾鏡的使用(靜止圖像,視頻,高動態范圍等)。請參閱表4-2。
  • 濾鏡是否由Core Image(內置)提供。請參閱表4-3。

表4-1 效果類型的濾鏡類別常量

效果類型 說明
kCICategoryDistortionEffect 扭曲效果,如凹凸,旋轉,洞
kCICategoryGeometryAdjustment 幾何調整,如仿射變換,裁剪,透視變換
kCICategoryCompositeOperation 合成,例如source over,minimum,source atop,color dodge blend mode
kCICategoryHalftoneEffect 半色調效果,如屏幕,線條屏幕,陰影線
kCICategoryColorAdjustment 顏色調整,如伽馬調整,白點調整,曝光
kCICategoryColorEffect 色彩效果,如色調調整,張貼
kCICategoryTransition 圖像之間的過渡,例如溶解,與面具分解,滑動
kCICategoryTileEffect 平鋪效果,如平行四邊形,三角形
kCICategoryGenerator 圖像生成器,如條紋,恒定顏色,棋盤格
kCICategoryGradient 漸變,如軸向,徑向,高斯
kCICategoryStylize 風格化,例如像素化,結晶
kCICategorySharpen 銳化,亮度
kCICategoryBlur 模糊,如高斯,變焦,運動

表4-2 濾鏡用法的濾鏡類別常量

使用 指示
kCICategoryStillImage 可用于靜止圖像
kCICategoryVideo 可用于視頻
kCICategoryInterlaced 可用于隔行掃描圖像
kCICategoryNonSquarePixels 可用于非方形像素
kCICategoryHighDynamicRange 可用于高動態范圍像素

表4-3 濾鏡來源的濾鏡類別常量

過濾原點 指示
kCICategoryBuiltIn Core Image提供的濾鏡

獲取濾鏡名稱列表后,可以通過創建CIFilter對象并按attributes如下方式調用方法來檢索濾鏡的屬性:

CIFilter * myFilter = [CIFilter filterWithName:@“<#Filter Name Here#>”];
NSDictionary * myFilterAttributes = [myFilter attributes];

您將字符串“ <# Filter Name Here #>” 替換為您感興趣的濾鏡的名稱。屬性包括名稱,類別,類,最小值和最大值。有關可返回的屬性的完整列表,請參閱CIFilter類參考。

構建濾鏡字典

如果您的應用提供了用戶界面,則可以查閱濾鏡字典以創建和更新用戶界面。例如,布爾值的濾鏡屬性需要一個復選框或類似的用戶界面元素,并且在一個范圍內連續變化的屬性可以使用滑塊。您可以使用最大值和最小值作為文本標簽的基礎。默認屬性設置將指示用戶界面中的初始設置。

濾鏡名稱和屬性提供了構建用戶界面所需的所有信息,允許用戶選擇濾鏡并控制其輸入參數。濾鏡的屬性告訴您濾鏡具有多少輸入參數,參數名稱,數據類型以及最小值,最大值和默認值。

注意: 如果您對構建Core Image濾鏡的用戶界面感興趣,請參閱IKFilterUIView類參考,該參考提供包含Core Image濾鏡的輸入參數控件的視圖。

清單4-1顯示了獲取濾鏡名稱并按功能類別構建濾鏡字典的代碼。代碼在- kCICategoryGeometryAdjustment,kCICategoryDistortionEffect,kCICategorySharpen和kCICategoryBlur這些類別中檢索濾鏡生成基于應用程序定義的功能類別字典,例如畸變和焦點字典。功能類別對于在用戶有意義在菜單中組織濾鏡名稱很有用。代碼不會遍歷所有可能的Core Image濾鏡類別,但您可以通過遵循相同的過程輕松擴展此代碼。

清單4-1 按功能類別構建濾鏡字典的代碼

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];

清單4-2顯示了清單4-1中buildFilterDictionary調用的例程。此例程為功能類別中的每個濾鏡構建屬性字典。列表后面為每個編號行代碼的詳細說明。

清單4-2 按功能名稱構建濾鏡字典

- (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;
}

這是代碼的作用:

  • 將一組濾鏡名稱作為輸入參數。回想一下清單4-1,該數組可以是來自多個Core Image濾鏡類別的濾鏡名稱的串聯。在此示例中,數組基于功能類別被程序設置(Distortion或Focus)。
  • 迭代濾鏡名稱數組。
  • 檢索濾鏡名稱的濾鏡對象。
  • 檢索濾鏡的屬性字典,并將其添加到例程返回的字典中。

注意: 在OS X v10.5及更高版本中運行的應用程序可以使用CIFilter Image Kit添加來提供濾鏡瀏覽器和用于設置濾鏡輸入參數的視圖。請參閱CIFilter Image Kit Additions和ImageKit Programming Guide。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,461評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,538評論 3 417
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,423評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,991評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,761評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,207評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,268評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,419評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,959評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,653評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,901評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,678評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,978評論 2 374

推薦閱讀更多精彩內容