码迷,mamicode.com
首页 > 其他好文 > 详细

滤镜CIFilter简单处理(模糊效果,旧色调处理)

时间:2015-01-22 11:12:32      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:ios   cifilter   模糊   

单创建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



滤镜CIFilter简单处理(模糊效果,旧色调处理)

标签:ios   cifilter   模糊   

原文地址:http://blog.csdn.net/u010670117/article/details/43015809

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!