NSArray *properties = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];
NSLog(@"FilterName:\n%@",
properties);//显示所有过滤器名字
for (NSString *filterName in properties) {
CIFilter
*fltr = [CIFilter filterWithName:filterName];//用一个过滤器名字生成一个过滤器CIFilter对象
NSLog(@"%@:\n%@", filterName, [fltr attributes]);//这个过滤器支持的属性
}
比如常用的 CIColorControls:
{
CIAttributeFilterCategories =
(//类型
CICategoryColorAdjustment,
CICategoryVideo,
CICategoryStillImage,
CICategoryInterlaced,
CICategoryNonSquarePixels,
CICategoryBuiltIn
);
CIAttributeFilterDisplayName
= "Color Controls";
CIAttributeFilterName =
CIColorControls;
inputBrightness =
{//亮度
CIAttributeClass = NSNumber;
CIAttributeDefault = 0;
CIAttributeIdentity = 0;
CIAttributeSliderMax = 1;
CIAttributeSliderMin = "-1";
CIAttributeType = CIAttributeTypeScalar;
};
inputContrast =
{//对比度
CIAttributeClass = NSNumber;
CIAttributeDefault = 1;
CIAttributeIdentity = 1;
CIAttributeSliderMax = 4;
CIAttributeSliderMin = 0;
CIAttributeType = CIAttributeTypeScalar;
};
inputImage =
{
CIAttributeClass = CIImage;
CIAttributeType = CIAttributeTypeImage;
};
inputSaturation =
{//饱和度
CIAttributeClass = NSNumber;
CIAttributeDefault = 1;
CIAttributeIdentity = 1;
CIAttributeSliderMax = 2;
CIAttributeSliderMin = 0;
CIAttributeType = CIAttributeTypeScalar;
};
}
首先设置好过滤器参数
// 创建基于GPU的CIContext对象
context = [CIContext contextWithOptions: nil];
filter = [CIFilter filterWithName:@"CIColorControls"];
cisourceImg = [CIImage imageWithContentsOfURL:fileNameAndPath];
[filter setValue:cisourceImg forKey:kCIInputImageKey];
[filter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputSaturation"];//饱和度
饱和度已经被定义成 kCIInputSaturationKey,可以直接用
1.0必须介于min 和
max之间
// 得到过滤后的图片
CIImage *outputImage =
[filter outputImage];
// 转换图片
CGImageRef cgimg =
[context createCGImage:outputImage fromRect:[outputImage extent]];
UIImage *newImg = [UIImage imageWithCGImage:cgimg];
// 释放C对象
CGImageRelease(cgimg);
完************************
当然filter可以一次同时设置多个值比如:
[filter setValue:[NSNumber numberWithFloat:1.0] forKey:kCIInputSaturationKey];
[filter setValue:[NSNumber numberWithFloat:1.0] forKey:kCIInputContrastKey];
[filter setValue:[NSNumber numberWithFloat:1.0] forKey:kCIInputBrightnessKey];
当你得到outputImage后,把这个outputImage作为另外一个filter的 cisourceImg,
这样可以进行多次过滤,最后一轮过滤后,才转换成UIImage
显示。
过滤效果非常高,不用担心速度。有没有想法做一个照相软件?处理图片呢?
这个支持的ios5.0以上版本