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

论坛 期权论坛 脚本     
匿名技术用户   2021-1-5 08:20   11   0

单创建CIFilter 没有专业处理, 仅能达到简单的模糊效果,效果如图

(1)原图


(2)旧色调处理效果


(3)模糊处理


简单的代码结果如下

//

// ViewController.m

// 滤镜

// 本文查看博客地址http://blog.csdn.net/u010670117

// 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 {

[superviewDidLoad];

UILabel * label = [[UILabelalloc]initWithFrame:CGRectMake(20,30,280, 20)];

label.backgroundColor = [UIColorcyanColor];

label.text =@"先选中按钮,再拖动滑块即可达到想要的效果";

label.numberOfLines =0;

label.font = [UIFontsystemFontOfSize:14.0];

[self.viewaddSubview:label];

_slider = [[UISlideralloc]initWithFrame:CGRectMake(50,50,200, 40)];

_slider.maximumValue =1.0;

_slider.minimumValue =0;

_slider.continuous =YES;

[_slideraddTarget:selfaction:@selector(valueChange)forControlEvents:UIControlEventValueChanged];

[self.viewaddSubview:_slider];

_segmentControl = [[UISegmentedControlalloc]initWithFrame:CGRectMake(100,80,120, 40)];

// _segmentControl.segmentedControlStyle = UISegmentedControlStyleBar;

[_segmentControlinsertSegmentWithTitle:@"旧色调"atIndex:0animated:YES];

[_segmentControlinsertSegmentWithTitle:@"模糊设置"atIndex:1animated:YES];

[_segmentControladdTarget:selfaction:@selector(ButtonAction)forControlEvents:UIControlEventValueChanged];

[self.viewaddSubview:_segmentControl];

_image = [UIImageimageNamed:@"朝霞.jpg"];

_imageView = [[UIImageViewalloc]initWithFrame:CGRectMake(50,150,_image.size.width,_image.size.height)];

[_imageView setImage:_image];

[self.viewaddSubview:_imageView];

}

-(void)ButtonAction

{

switch (_segmentControl.selectedSegmentIndex) {

case0:

{

self.type =SepiaTone;//旧色调

}

break;

default:

{

self.type =GaussianBlur;//模糊设置

}

break;

}

}

-(void)valueChange

{

switch (self.type) {

caseSepiaTone:

{

//旧色调

[selffilterSepiaTone];

}

break;

default:

{

//模糊设置

[selffilterGaussianBlur];

}

break;

}

}

//旧色调处理

-(void)filterSepiaTone

{

//创建CIContext对象(默认值,传入nil)

CIContext * context = [CIContextcontextWithOptions:nil];

//获取图片

CIImage * cimage = [CIImageimageWithCGImage:[_imageCGImage]];

//创建CIFilter

CIFilter * sepiaTone = [CIFilterfilterWithName:@"CISepiaTone"];

//设置滤镜输入参数

[sepiaTonesetValue:cimageforKey:@"inputImage"];

//获取滑块的Value,设置色调强度

[sepiaTone setValue:[NSNumbernumberWithFloat:[_slidervalue]]forKey:@"inputIntensity"];

//创建处理后的图片

CIImage * resultImage = [sepiaTonevalueForKey:@"outputImage"];

CGImageRef imageRef = [contextcreateCGImage:resultImage fromRect:CGRectMake(0,0,self.image.size.width,self.image.size.height)];

UIImage * image = [[UIImagealloc]initWithCGImage:imageRef];

[_imageViewsetImage:image];

CFRelease(imageRef);

}

//模糊设置处理

-(void)filterGaussianBlur

{

//创建CIContext对象

CIContext * context = [CIContextcontextWithOptions:nil];

//获取图片

CIImage * image = [CIImageimageWithCGImage:[_imageCGImage]];

//创建CIFilter

CIFilter * gaussianBlur = [CIFilterfilterWithName:@"CIGaussianBlur"];

//设置滤镜输入参数

[gaussianBlursetValue:imageforKey:@"inputImage"];

//设置模糊参数

[gaussianBlursetValue:[NSNumbernumberWithFloat:_slider.value*10]forKey:@"inputRadius"];

//得到处理后的图片

CIImage* resultImage = [gaussianBlurvalueForKey:@"outputImage"];

CGImageRef imageRef = [contextcreateCGImage:resultImage fromRect:CGRectMake(0,0,self.image.size.width,self.image.size.height)];

UIImage * imge = [[UIImagealloc]initWithCGImage:imageRef];

[_imageView setImage:imge];

CFRelease(imageRef);

}

@end


//个人笔记,严禁商业转载

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP