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

本文介绍了如何在iOS中利用CIFilter进行简单的图像处理,包括应用旧色调滤镜和高斯模糊滤镜。通过示例代码展示了如何创建CIContext、CIImage,设置CIFilter参数,并最终将处理后的图像显示到UIImageView上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

(1)原图


(2)旧色调处理效果


(3)模糊处理


简单的代码结果如下

//

//  ViewController.m

//  滤镜

// 本文查看博客地址http://blog.youkuaiyun.com/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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值