Core Image滤镜

开始之前,让我们谈谈Core Image框架中最重要的几个类:

  • CIContext. 所有图像处理都是在一个CIContext 中完成的,这很像是一个Core Image处理器或是OpenGL的上下文。
  • CIImage. 这个类保存图像数据。它可以从UIImage、图像文件、或者是像素数据中构造出来。
  • CIFilter. 滤镜类包含一个字典结构,对各种滤镜定义了属于他们各自的属性。滤镜有很多种,比如鲜艳程度滤镜,色彩反转滤镜,剪裁滤镜等等。

基本的图像滤镜

作为第一个尝试,我们先简单的让图像通过一个CIFilter 之后显示在屏幕上。每一次当我们想应用一个CIFilter的时候都要有以下四个步骤:

  1. 创建一个 CIImage 对象: CIImage 有如下的初始化方法: imageWithURL:, imageWithData:, imageWithCVPixelBuffer:, 和 imageWithBitmapData:bytesPerRow:size:format:colorSpace:。但是大多数时候你只会经常用到imageWithURL。
  2. 创建一个 CIContext: 一个 CIContext 可以是基于CPU或是GPU的。它可以被重用,所以你不用每次都创建一个。但是当输出CIImage对象的时候你至少一定会需要一个CIContext。
  3. 创建一个CIFilter: 当你创建滤镜的时候,你可以在上面配置一定数量的属性。具体的属性取决于你所要用的滤镜。
  4. 输出滤镜:这个滤镜会输出一个图像成为CIImage。 你可以用CIContext把它转化为一个UIImage 。


CIContext *context = [CIContext contextWithOptions:nil];//上下文

CIImage *cImage = [CIImage imageWithCGImage:[imageView.image CGImage]];//保存图像数据

CIFilter *invert = [CIFilter filterWithName:@"CIColorInvert"];//创建滤镜对象,还可以使用filterWithName:keysAndValue:在创建的同时设置参数
CIFilter *invert = [CIFilter filterWithName:@"CIColorInvert" keysAndValue:@"inputImage", cImage, nil ];

[invert setDefaults];//设置滤镜的默认参数,将全部参数设置为默认值

[invert setValue:cImage forKey:@"inputImage"];//设置输入参数,是必须要设定的参数

CIImage *result = [invert valueForKey:@"outputImage"];//获得输出的CIImage图像对象,可以调用滤镜的outputImage方法获得图像输出对象
CIImage *result = [invert outputImage];


例如:
CIImage *ciImage = [[CIImage alloc] initWithImage:orgImage];
    
    CIFilter *filter = [CIFilter filterWithName:items[row]
                                  keysAndValues:kCIInputImageKey, ciImage, nil];
   
    [filter setDefaults];
    
    CIContext *context = [CIContext contextWithOptions:nil];
    CIImage *outputImage = [filter outputImage];
    CGImageRef cgImage = [context createCGImage:outputImage
                                       fromRect:[outputImage extent]];
    
    imageView.image = [UIImage imageWithCGImage:cgImage];
    
    CGImageRelease(cgImage);









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值