简单创建CIFilter 没有专业处理, 仅能达到简单的模糊效果,效果如图
(1)原图
(2)旧色调处理效果
(3)模糊处理
简单的代码结果如下
//
// ViewController.m
// 滤镜
// 本文查看地址
// Created by yangxiuying on 15/1/21.
// Copyright (c) 2015年 lanjiying. All rights reserved.
//
#import "ViewController.h"
typedef enum
{
///旧色调
SepiaTone = 0,
///模糊设置
GaussianBlur,
}Stype;
@interface ViewController ()
@property(nonatomic,retain)UISlider * slider;
@property(nonatomic,retain)UISegmentedControl * segmentControl;
@property(nonatomic,assign)Stype type;
@property(nonatomic,retain)UIImageView * imgView;
@property(nonatomic,retain)UIImage * image;
@property(nonatomic,retain)UIImageView * imageView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(20, 30, 280, 20)];
label.backgroundColor = [UIColor cyanColor];
label.text = @"先选中按钮,再拖动滑块即可达到想要的效果";
label.numberOfLines = 0;
label.font = [UIFont systemFontOfSize:14.0];
[self.view addSubview:label];
_slider = [[UISlider alloc] initWithFrame:CGRectMake(50, 50, 200, 40)];
_slider.maximumValue = 1.0;
_slider.minimumValue = 0;
_slider.continuous = YES;
[_slider addTarget:self action:@selector(valueChange) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:_slider];
_segmentControl = [[UISegmentedControl alloc] initWithFrame:CGRectMake(100, 80, 120, 40)];
// _segmentControl.segmentedControlStyle = UISegmentedControlStyleBar;
[_segmentControl insertSegmentWithTitle:@"旧色调" atIndex:0 animated:YES];
[_segmentControl insertSegmentWithTitle:@"模糊设置" atIndex:1 animated:YES];
[_segmentControl addTarget:self action:@selector(ButtonAction) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:_segmentControl];
_image = [UIImage imageNamed:@"朝霞.jpg"];
_imageView = [[UIImageView alloc] initWithFrame:CGRectMake(50, 150, _image.size.width, _image.size.height)];
[_imageView setImage:_image];
[self.view addSubview:_imageView];
}
-(void)ButtonAction
{
switch (_segmentControl.selectedSegmentIndex) {
case 0:
{
self.type = SepiaTone;//旧色调
}
break;
default:
{
self.type = GaussianBlur; //模糊设置
}
break;
}
}
-(void)valueChange
{
switch (self.type) {
case SepiaTone:
{
//旧色调
[self filterSepiaTone];
}
break;
default:
{
//模糊设置
[self filterGaussianBlur];
}
break;
}
}
//旧色调处理
-(void)filterSepiaTone
{
//创建CIContext对象(默认值,传入nil)
CIContext * context = [CIContext contextWithOptions:nil];
//获取图片
CIImage * cimage = [CIImage imageWithCGImage:[_image CGImage]];
//创建CIFilter
CIFilter * sepiaTone = [CIFilter filterWithName:@"CISepiaTone"];
//设置滤镜输入参数
[sepiaTone setValue:cimage forKey:@"inputImage"];
//获取滑块的Value,设置色调强度
[sepiaTone setValue:[NSNumber numberWithFloat:[_slider value]] forKey:@"inputIntensity"];
//创建处理后的图片
CIImage * resultImage = [sepiaTone valueForKey:@"outputImage"];
CGImageRef imageRef = [context createCGImage:resultImage fromRect:CGRectMake(0, 0, self.image.size.width, self.image.size.height)];
UIImage * image = [[UIImage alloc] initWithCGImage:imageRef];
[_imageView setImage:image];
CFRelease(imageRef);
}
//模糊设置处理
-(void)filterGaussianBlur
{
//创建CIContext对象
CIContext * context = [CIContext contextWithOptions:nil];
//获取图片
CIImage * image = [CIImage imageWithCGImage:[_image CGImage]];
//创建CIFilter
CIFilter * gaussianBlur = [CIFilter filterWithName:@"CIGaussianBlur"];
//设置滤镜输入参数
[gaussianBlur setValue:image forKey:@"inputImage"];
//设置模糊参数
[gaussianBlur setValue:[NSNumber numberWithFloat:_slider.value*10] forKey:@"inputRadius"];
//得到处理后的图片
CIImage* resultImage = [gaussianBlur valueForKey:@"outputImage"];
CGImageRef imageRef = [context createCGImage:resultImage fromRect:CGRectMake(0, 0, self.image.size.width, self.image.size.height)];
UIImage * imge = [[UIImage alloc] initWithCGImage:imageRef];
[_imageView setImage:imge];
CFRelease(imageRef);
}
@end
原文地址:http://blog.csdn.net/u010670117/article/details/43015809