說明:參考文獻(官方文檔):https://developer.apple.com/library/content/documentation/GraphicsImaging/Reference/CoreImageFilterReference/index.html#//apple_ref/doc/filter/ci/CIAdditionCompositing
版權:POCO所有
本文沒有對CICategoryTileEffect 類有過多的描述
濾鏡的原理
不同類有不同的原理殴蓬,
最基本的是用5*4的顏色矩形來處理每一個像素點
有的是獲取所有的點枢希,根據(jù)點的顏色來判斷毅桃,是否讓它透明,這樣子可以做一些扣圖
有的是利用2-3張圖片? 來做一些炫酷的特效
有的是生成二維碼的 有的是生成一個光暈的
然后浮雕的原理是用自己的rgb的值-相鄰的點的rgb的值+128? 這樣子的算法會導致要2個點顏色相差比較大效果才明顯
有一些的原理是 獲取到一個區(qū)域? 然后對這個區(qū)域 做一些特性 或取該區(qū)域的顏色值 生成有規(guī)律的圖片
調用濾鏡接口
CIFilter *filter = [CIFilter filterWithName:@"濾鏡的名字"]];
//一般都會讓你輸入一張圖片
CIImage * a =[[CIImage alloc] initWithImage:self.showImage];
[self filter:filter setValue:a forKey:kCIInputImageKey];
//給濾鏡的參數(shù)賦值就用這句代碼
[filter setValue:<#(nullable id)#> forKey:<#(nonnull NSString *)#>];
//以下2句為查看該濾鏡的所有屬性
//filter = [CIFilterfilterWithName:@"濾鏡的名字"];
//NSLog(@"----%@",[filter attributes]);
CIImage *outputImage = [filter outputImage];
CIContext *context = [CIContext contextWithOptions:nil];
UIImage *showImage = [UIImage imageWithCGImage:[context createCGImage:outputImage fromRect:outputImage.extent]];
CGImageRef ref = [showImage CGImage];
//把得到的圖片賦值到需要展示的imageView上
self.showImageView.image = showImage;
//調用c的接口都要release 不然會占內存
CGImageRelease(ref);
//防止輸入的key有誤
- (void)filter:(CIFilter *)filter setValue:(id)value forKey:(NSString *)key {
if ([filter.inputKeys containsObject:key]) {
[filter setValue:value forKey:key];
}
}
比較特殊的
這個類的濾鏡? 有幾個需要用到c++的代碼 是用來取顏色范圍的
還有這個類 是可以自定義顏色矩形的
這個是7*7的 參數(shù)不能直接傳數(shù)組味抖,要用一個指針指向該數(shù)組 然后傳指針做參數(shù)
濾鏡常見的賦值