- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib. // 滤镜效果
NSArray *operations = @[@"CILinearToSRGBToneCurve",
@"CIPhotoEffectChrome",
@"CIPhotoEffectFade",
@"CIPhotoEffectInstant",
@"CIPhotoEffectMono",
@"CIPhotoEffectNoir",
@"CIPhotoEffectProcess",
@"CIPhotoEffectTonal",
@"CIPhotoEffectTransfer",
@"CISRGBToneCurveToLinear",
@"CIVignetteEffect"]; CGFloat width = self.view.frame.size.width/;
CGFloat height = self.view.frame.size.height/; NSMutableArray *imageViews = [NSMutableArray arrayWithCapacity:]; for (int i = ; i < [operations count]; i++)
{
UIImageView *imageView = [[UIImageView alloc]initWithFrame:
CGRectMake(i%*width, i/*height, width, height)];
imageView.image = [UIImage imageNamed:@"timg.jpeg"];
[imageViews addObject:imageView];
[self.view addSubview:imageView];
} dispatch_async(dispatch_get_global_queue(, ),^{ NSMutableArray *images = [NSMutableArray arrayWithCapacity:]; for (int i = ; i < [operations count]; i++)
{
UIImage *image = [UIImage imageNamed:@"timg.jpeg"];
CIImage *cImage = [[CIImage alloc]initWithImage:image]; //使用资源
CIFilter *filter = [CIFilter filterWithName:operations[i]
keysAndValues:kCIInputImageKey,cImage, nil]; //使用默认参数
[filter setDefaults]; //生成上下文
CIContext*context = [CIContext contextWithOptions:nil]; //滤镜生成器输出图片
CIImage *outputimage = [filter outputImage]; //转换为UIImage
CGImageRef ref = [context createCGImage:outputimage fromRect:[outputimage extent]];
UIImage *temp = [UIImage imageWithCGImage:ref]; [images addObject:temp]; //释放
CGImageRelease(ref);
} dispatch_async(dispatch_get_main_queue(), ^{
for (int x = ; x < [images count]; x++)
{
UIImageView *imageView = imageViews[x];
imageView.image = images[x];
}
});
});
}

原图

添加滤镜后效果图

[iOS]CIFilter滤镜的更多相关文章

  1. iOS开发 滤镜的使用

    iOS开发之滤镜的使用技巧(CoreImage)   一.滤镜的内容和效果是比较多并且复杂的 ,学习滤镜需要技巧 如下: 两个输出语句解决滤镜的属性选择问题: 1.查询效果分类中包含什么效果按住com ...

  2. ios ColorLUT滤镜

    通过这种方格图片实现滤镜 代码: "CIFilter+ColorLUT.h" "CIFilter+ColorLUT.m" #import "CIFil ...

  3. 解决CIFilter滤镜后图片大小和方向发生变化

    调用contextWithOptions:和createCGImage: fromRect:方法创建CIContext.与以往不同的地方是CIImage没有frame与bounds属性:只有exten ...

  4. iOS GPUImage 滤镜介绍

    这里直接引用官方描述: The GPUImage framework is a BSD-licensed iOS library that lets you apply GPU-accelerated ...

  5. iOS中滤镜处理及相关内存泄漏问题的解决

    最近工作之余在做一个美图秀秀的仿品 做到滤镜这块的时候  自己就参考了网上几位博主(名字忘了记,非常抱歉)的博客,但是发现跟着他们的demo做的滤镜处理,都会有很严重的内存泄漏,于是就自己按照大体的思 ...

  6. iOS 简单滤镜

    转自:http://blog.csdn.net/lovechris00/article/details/51496458 1.主要是运用 ImageUtil库,把原图通过矩阵色值设置层不同滤镜效果下的 ...

  7. iOS中滤镜种类及相关介绍

  8. iOS开发之滤镜的使用技巧(CoreImage)

    一.滤镜的内容和效果是比较多并且复杂的 ,学习滤镜需要技巧 如下: 两个输出语句解决滤镜的属性选择问题: 1.查询效果分类中包含什么效果按住command 点击CIFilter 进入接口文件 找到第1 ...

  9. iOS滤镜系列-滤镜开发概览

    概述 滤镜最早的出现应该是应用在相机镜头前实现自然光过滤和调色的镜片,然而在软件开发中更多的指的是软件滤镜,是对镜头滤镜的模拟实现.当然这种方式更加方便快捷,缺点自然就是无法还原拍摄时的真实场景,例如 ...

随机推荐

  1. 使用postMessage通信,未触发message事件

    前提: 父子页面跨域通信,使用postMessage技术 a页面为父页面,b页面为子页面 a中包含多个iframe,部分域名是相同的,目录层级不一致,地址使用变量根据触发的条件不同拼接地址 部分代码( ...

  2. JQuery漂浮广告代码

    <!doctype html><html><head><meta charset="utf-8"><title>jque ...

  3. Integer ==判断遇到的问题

      今天开发过程中,遇到 这样的一个问题 public class Test { public static void main(String[] args) { Integer aa = 12345 ...

  4. 使用拦截器拦截html参数

    公司最新需求:根据传递的参数进行业务判断,如果符合条件则继续后面的业务逻辑,否则跳转到指定的错误页面.有些是请求的controller 使用了spring  aop的方式进行验证:但是有些是html页 ...

  5. netstat 检测及监测网络连接

    网站没有很多流量,可查带宽却跑了几十M? 这是什么情况呢?      如果是出现这种情况,不排除是被CC了的可能.那么如何确定是否真的被CC了,被CC又有什么对应政策呢? netstat -na ,用 ...

  6. C/C++内存管理详解 ZZ

    内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟的收获则是一遍一遍的 检查代码和对C++的痛恨,但内存管理在C++中无处不在,内存 ...

  7. Java学习---Excel读写操作

    1.1.1. 简介 Apache POI 使用Apache POI 完成Excel读写操作 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API ...

  8. 二进制安装mariaDB

    1.获取二进制安装包 获取二进制格式MariaDB安装包,可去官网下载. 因为是实验环境,所以选择了最新版. mariadb-10.2.12-linux-x86_64.tar.gz 2.解压 解压到 ...

  9. (转)如何解决VC中的警告warning C4251 needs to have dll-interface

    这通常是由于以数据成员方式在DLL导出类中使用了模板类造成的.比如: #include <iostream> #include <vector> using namespace ...

  10. oracle-记录

    同時查新多个条件的数量 select sum(DECODE(trim(t.ASSESSED_RESULT),'维持',1,0)) maintainNum, sum(DECODE(trim(t.ASSE ...