IOS之简单滤镜详解

来源:互联网 发布:java web 线程池 编辑:程序博客网 时间:2024/05/16 05:06

//

//  ViewController.m

//  滤镜练习

//

//  Created by scsys on 16/3/24.

//  Copyright © 2016 scsys. All rights reserved.

//


#import "ViewController.h"

***准备工作

//第一步:了解滤镜原理  其实滤镜就是在一张图片上黏合了一张图片 就像你从窗户里面看外面

//第二步: 三个部分 CIImage图片(准备要合成的图片) CIFilter滤镜(黏合图片和滤镜)  CIContext上下文(用来绘制图片) 

//第三步:

command+鼠标左键点击CIFilter 进入之后上拉至128-148行 此为滤镜效果的类别 具体可看英文单词意思 随便选择一个进行如下操作

NSLog(@"%@",[CIFilter filterNamesInCategory:kCICategoryCompositeOperation]);输出如下



此为你选择的滤镜效果的名字  这里有点绕  记得这里才是滤镜效果的名字就好


然后选择这个方法 注意返回值是CIFilter 把你刚刚选择的滤镜效果的名字复制进来

 NSLog(@"%@",[CIFilter filterWithName:@"CIExclusionBlendMode"].attributes);

输出结果如下 


这一步是用来看参数类型的 可以先看代码 一会自然明白

@interface ViewController ()<UIImagePickerControllerDelegate,UINavigationControllerDelegate>//两个代理方法 后面有介绍

{

//创建一个图片视图 作为全局变量

    UIImageView *imageView;

}

@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    imageView = [[UIImageView alloc]initWithFrame:self.view.frame];

    [self.view addSubview:imageView];

   //这个按钮是用来点击进入相册的  为了选取图片  

    UIButton *button = [[UIButton alloc]initWithFrame:CGRectMake(1010015080)];

    [button setTitle:@"start" forState:UIControlStateNormal];

    [button setTitleColor:[UIColor blackColorforState:UIControlStateNormal];

    [self.view addSubview:button];

    [button addTarget:self action:@selector(buttona) forControlEvents:UIControlEventTouchUpInside];

  //这个按钮是用来点击添加滤镜效果的

    UIButton *button1 = [[UIButton alloc]initWithFrame:CGRectMake(1020015080)];

    [button1 setTitle:@"变变" forState:UIControlStateNormal];

    [button1 setTitleColor:[UIColor blackColorforState:UIControlStateNormal];

    [self.view addSubview:button1];

    [button1 addTarget:self action:@selector(buttonaa) forControlEvents:UIControlEventTouchUpInside];


    

    

}


-(void)buttona{

//创建图片采集控制器   可以进入相册  具体不做详解 百度有

    UIImagePickerController *picker = [[UIImagePickerController alloc]init];

    picker.delegate = self;

//跳进相册

    [self presentViewController:picker animated:YES completion:nil];

    


}

//代理的方法 要挂两个代理

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{

    UIImage *image = info[UIImagePickerControllerOriginalImage];

    imageView.image = image;

//选择完图片要跳出控制器

    [self dismissViewControllerAnimated:YES completion:nil];

}

-(void)buttonaa{

    ***正题

 //1.选择要黏合的图片

    CIImage *ciimage = [CIImage imageWithCGImage:imageView.image.CGImage];

 //2.选择滤镜

    CIFilter *filter = [CIFilter filterWithName:@"CIVortexDistortion"];

 //3.把图片放入滤镜

//设置参数 参数类型上面有 

上方我又截图 可以回去看

command+鼠标左键点击CIFilter 165-191行都是参数名字 

    [filter setValue:ciimage forKey:kCIInputImageKey]; 

    [filter setValue:[CIVector vectorWithX:20 Y:20forKeykCIInputCenterKey];

//4.把和滤镜黏合好的图片接收出来

CIImage *image1 =  filter.outputImage;

//创建上下文 用来绘制出成行的图片

    CIContext *context = [CIContext contextWithOptions:nil];  

//.exent百度英文意思

    CGImageRef ref1 = [context createCGImage:image1   fromRect:image1.extent];

//把黏合后的图片显示出来 

    imageView.image = [UIImage imageWithCGImage:ref1];

                                        完事 

}

                           

@end

0 0
原创粉丝点击