iOS5新特性:强大的Core Image
来源:互联网 发布:程序员逻辑思维训练 编辑:程序博客网 时间:2024/04/29 12:39
iOS5给我们带来了很多很好很强大的功能和API。CoreImage就是其中之一,它使我们很容易就能处理图片的各种效果,色彩啊,曝光啊,饱和度啊,变形啊神马的。
可惜苹果一直没能完善官方文档,也没有推出示例代码,所以国内很多同学可能还没有开始使用。
但国外的大神们已经证明这是个相当强悍的框架,不仅功能强大,而且可以直接使用GPU,效率奇高,甚至可以实时的对视频进行渲染。
下面让我们来看看,如何具体使用它:
首先你需要导入 CoreImage.framework 框架;进行Mac(不是iOS)开发的同学请导入QuartzCore.framework 框架,包含在其中了。
然后我们先来看看3个主要的类:
CIContext:它与Core Graphics 和 OpenGL context类似,所有CoreImage的处理流程都通过它来进行;
CIImage:它用来存放图片数据,可以通过UIImage,图片文件或像素数据创建;
CIFilter:通过它来定义过滤器的详细属性。
CIContext有两种初始化方法,分别对应GPU和CPU
// 创建基于GPU的CIContext对象
context = [CIContext contextWithOptions: nil];
// 创建基于CPU的CIContext对象
//context = [CIContext contextWithOptions: [NSDictionarydictionaryWithObject:[NSNumber numberWithBool:YES]
forKey:kCIContextUseSoftwareRen
一般采用第一种基于GPU的,因为效率要比CPU高很多,但是要注意的是基于GPU的CIContext对象无法跨应用访问。
比如你打开UIImagePickerController要选张照片进行美化,如果你直接在UIImagePickerControllerD
CIImage的初始化方法有很多,常用的也是2种:
// 通过图片路径创建CIImage
NSString *filePath = [[NSBundle mainBundle]pathForResource:@"image" ofType:@"png"];
NSURL *fileNameAndPath = [NSURL fileURLWithPath:filePath];
beginImage = [CIImageimageWithContentsOfURL:fileNameAndPath];
// 通过UIImage对象创建CIImage
UIImage *gotImage = ...;
beginImage = [CIImage imageWithCGImage:gotImage.CGImage];
CIFilter初始化:
// 创建过滤器
filter = [CIFilter filterWithName:@"CISepiaTone"];
[filter setValue:beginImage forKey:kCIInputImageKey];
[filter setValue:[NSNumber numberWithFloat:slideValue]forKey:@"inputIntensity"];
第一行:指定使用哪一个过滤器,通过[CIFilter filterNamesInCategory:kCICategoryBuiltIn]能得到所有过滤器的列表
第二行:指定需要处理的图片
第三行:指定过滤参数,每个过滤器的参数都不一样,可以在官方文档里搜索“Core Image FilterReference”查看
得到过滤后的图片并输出:
CIImage *outputImage = [filter outputImage];
CGImageRef cgimg = [context createCGImage:outputImagefromRect:[outputImage extent]];
UIImage *newImg = [UIImageimageWithCGImage:cgimg];
[imgV setImage:newImg];
CGImageRelease(cgimg);
第一行:通过[filter outputImage]可以得到过滤器输出的图片
第二行:通过CIContext的方法createCGImage: fromRect:得到CGImage
第三行:转化为UIImage,这样我们就可以跟据需要显示在界面上了
至此一个过滤周期就完成了,简单来说分以下几个步骤:
1 初始化CIContext,CIImage
2 初始化CIFilter并设置参数
3 得到输出的图片
4 将图片转化成能显示的UIImage类型
如果想一张图片有多种过滤效果就需要重复2,3两步,并且要将上一个过滤器输出的图片作为下一个过滤器的参数
简单吧!几行代码就可以得到丰富的效果哦,我在代码里实现了3种效果。
- iOS5新特性:强大的Core Image
- iOS5新特性:强大的Core Image
- iOS5新特性:强大的Core Image
- iOS5新特性:强大的Core Image
- iOS5新特性:强大的Core Image
- iOS5新特性:强大的Core Image
- iOS5新特性:强大的Core Image(教你做自己的美图秀秀))
- iOS5新特性:强大的Core Image(教你做自己的美图秀秀))
- iOS5新特性:强大的Core Image(教你做自己的美图秀秀))
- iOS5新特性:强大的Core Image(教你做自己的美图秀秀))
- iOS5新特性:Core Image 图片处理的强力框架
- iOS5的新特性
- Core Image人脸检测(iOS5新特性学习之三)
- Core Image之Filter应用(iOS5新特性学习之四)
- Core Image人脸检测(iOS5新特性学习之三)
- Core Image人脸检测(iOS5新特性学习之三)
- Core Image人脸检测(iOS5新特性学习之三)
- 强大的Core Image
- iphone中按Home键退出程序
- c++ 构造函数中explicit关键字的作用
- performSelector:withObject:afterDelay:
- 判断有多少单词
- IOS图片叠加效果
- iOS5新特性:强大的Core Image
- C++ 学习笔记_0001_初步认识
- 精确FPS
- IOS背景图片拉伸
- Lua学习笔记 第三章 表达式
- IOS VIEW之间数据传递的方法
- IOS的NSNotificationCenter
- ListView异步加载图片
- Gallery Fling翻页以及自动翻页