示例代碼下載
查詢濾鏡系統
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。