<图形图像,动画,多媒体> 读书笔记 --- 图像处理

来源:互联网 发布:佛教的本质是骗局 知乎 编辑:程序博客网 时间:2024/05/16 15:59

为了便于操作图像iOS中定义图像类,UIImage是UIKit框架中定义的图像类,其封装了高层次图像类,可以通过多种方式创建这些对象.在Core Graphics框架(或Quartz 2D)中也定义了CGImage,他表示位图图像,因为CGImage被封装起来了,所以通常通过CGImageRef来使用CGImage.

除了UIImage和CGImage外,在Core Image框架中也有一个图像类 CIImage,CIImage封装了图像类能够很好地进行图像效果处理.例如,滤镜的使用.UIImage,CGImage和CIImage之间可以互相转化,涉及从C到OC对象转化,如果这里使用ARC技术,要注意内存释放问题.


Core Image 框架

Core Image是图像处理中非常重要的框架,Core Image用来实时的处理和分析图像,他能处理来自于Core Graphics,Core Video,and Image I/O 等框架的数据类型.并使用CPU或GPU进行渲染,Core Image能够屏蔽很多低层次的技术细节,如OpenGL ES 和 GCD等技术


Core Image 框架中有以下几个非常重要的类

CIImage , Core Image框架中的图像类

CIContext,上下文对象,所有图像处理都在一个CIContext中完成,通过Quartz 2D和OpenGL渲染CIImage对象

CIFilter,滤镜类包含一个字典结构,对各种滤镜定义了属于各自的属性

CIDetector,面部识别类,借助于CIFaceFeature可以识别嘴和眼睛的位置


在Core Image框架中最常用的是CIImage类,有一些构造方法和静态创建方法

+ (CIImage *)imageWithCGImage:(CGImageRef)image;//静态创建方法,通过CGImageRef创建图像对象+ (CIImage *)imageWithContentsOfURL:(NSURL *)url;//静态创建方法,通过文件路径创建图像对象+ (CIImage *)imageWithData:(NSData *)data;//静态创建方法,通过内存中NSData对象创建图像对象- (id)initWithCGImage:(CGImageRef)image;//构造方法,通过内存中CGImageRef对象创建图像对象- (id)initWithData:(NSData *)data;//构造方法,通过内存中NSData对象创建图像对象- (id)initWithContentsOfURL:(NSURL *)url;//构造方法,通过文件路径对象创建图像对象

CIContext *context = [CIContext contextWithOptions:nil];//创建上下文CIImage *cImage = [CIImage imageWithCGImage:[_image CGImage]];CIImage *result;        CIFilter *sepiaTone = [CIFilter filterWithName: @"CISepiaTone"];//创建滤镜    [sepiaTone setValue: cImage forKey: @"inputImage"];    double value  = [_slider value];        NSString *text =[[NSString alloc] initWithFormat:@"旧色调 Intensity : %.2f",value];    _label.text = text;    [text release];        [sepiaTone setValue: [NSNumber numberWithFloat: value]                 forKey: @"inputIntensity"];//设置值        result = [sepiaTone valueForKey:@"outputImage"];//输出        CGImageRef imageRef = [context createCGImage:result fromRect:CGRectMake(0, 0, self.imageView.image.size.width, self.imageView.image.size.height)];    UIImage *image =  [[UIImage alloc] initWithCGImage:imageRef];        _imageView.image = image;        CFRelease(imageRef);//记得释放    [image release];



0 0
原创粉丝点击