CoreImage是IOS5中新增框架,通过这个框架我们可以轻松地对图片进行各种特效处理

使用CoreImage的主要流程如下(需要添加CoreImage框架至项目中):

1 创建CIContext,IOS系统提供了3种方法创建CIContext

a.基于CPU

CIContext *context = [CIContext contextWithOption:@{kCIContextUseSoftwareRenderer:@YES}];

b.基于GPU

CIContext *context = [CIContext contextWithOption:nil];

最常用也是性能较好地一种方式,缺点是基于GPU的CIContext无法跨应用访问,比如打开UIImagePickerController选取图片,如果直接在委托方法中使用CIContext,将会自动降为基于CPU,所以可以在委托方法中保存图片,回到主类中调用CIContext进行处理

c.基于OpenGL优化,可获得实时性能

EAGLContext *eaglContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];

CIContext *context = [CIContext contextWithEAGLContext:eaglContext];

 

2 创建CIFilter过滤器

 

3 创建CIImage图片作为源图片,可以使用NSURL,UIImage以及NSData创建

 

4 将CIImage设置为CIFilter的inputImage,同时根据不同的过滤器设置不同的参数

 

5 通过CIFilter获取进过过滤器转换后的图片,图片格式为CIImage,通过CIContext可以得到CGImage

 

以下例子展示了像素画的过滤器

- (void)viewDidLoad
{
    [super viewDidLoad];

    //可以打印出所有的过滤器以及支持的属性
    NSArray *filters = [CIFilter filterNamesInCategory:kCICategoryBuiltIn];
    for (NSString *filterName in filters) {
        CIFilter *filter = [CIFilter filterWithName:filterName];
        NSLog(@"%@,%@",filterName,[filter attributes]);
    }
    
    
    //创建基于GPU的CIContext
    CIContext *context = [CIContext contextWithOptions:nil];
    
    //创建过滤器
    CIFilter *filter = [CIFilter filterWithName:@"CIPixellate"];
    
    //创建CIImage
    CIImage *sourceImage = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"girl" ofType:@"jpg"]]];
    
    //将CIImage设为源图片
    [filter setValue:sourceImage forKey:@"inputImage"];
    
    //设置过滤参数(像素大小)
    [filter setValue:@15 forKey:@"inputScale"];
    
    //得到输出图片
    CIImage *outputImage = [filter outputImage];
    
    CGImageRef cgImage= [context createCGImage:outputImage fromRect:[UIScreen mainScreen].bounds];
    UIImage *image = [UIImage imageWithCGImage:cgImage];
    
    //调用了create创建,需要release
    CGImageRelease(cgImage);
    
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    [self.view addSubview:imageView];
    
} 

 

posted on 2014-10-20 19:02  幸福小弥  阅读(2290)  评论(0编辑  收藏  举报