iOS CoreImage图片处理动态渲染(滤镜)
2015-06-30 16:37
736 查看
//
// ViewController.m
// CoreImageOfDong
//
// Created by Dong on 15/6/30.
// Copyright (c) 2015年 xindong. All rights reserved.
//
#import "ViewController.h"
#import <GLKit/GLKit.h>
// 需要导入此库
@interface ViewController ()
@property (nonatomic,
strong)
GLKView *glkView;
//渲染用的buffer视图(类似流媒体,实时改变)
@property (nonatomic, strong) CIFilter *filter;
@property (nonatomic, strong) CIImage *ciImage;
@property (nonatomic, strong) CIContext *ciContext;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIImage *showImage = [UIImage imageNamed:@"demo1.jpg"];
CGRect rect = CGRectMake(0, 0, showImage.size.width, showImage.size.height);
// 获取OpenGLES渲染的上下文
EAGLContext *eagContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
// 创建出渲染的buffer
self.glkView = [[GLKView alloc] initWithFrame:rect context:eagContext];
[self.glkView bindDrawable];
// 绑定绘制,否则刚开始会黑屏
[self.view addSubview:self.glkView];
// 创建出CoreImage用的上下文
self.ciContext = [CIContext contextWithEAGLContext:eagContext options:@{kCIContextWorkingColorSpace : [NSNull null]}];
// CoreImage相关设置
self.ciImage = [[CIImage alloc] initWithImage:showImage];
self.filter = [CIFilter filterWithName:@"CISepiaTone"];
[self.filter setValue:self.ciImage forKey:kCIInputImageKey];
[self.filter setValue:@(0) forKey:kCIInputIntensityKey];
// 开始渲染
[self.ciContext drawImage:[self.filter valueForKey:kCIOutputImageKey] inRect:CGRectMake(0, 0, self.glkView.drawableWidth, self.glkView.drawableHeight) fromRect:[self.ciImage
extent]];
[self.glkView display];
//
动态渲染
UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(30, 500, 200, 10)];
slider.minimumValue = 0.f;
slider.maximumValue = 10.f;
[slider addTarget:self action:@selector(changeColorValue:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:slider];
}
- (void)changeColorValue:(UISlider *)slider
{
[self.filter setValue:self.ciImage forKey:kCIInputImageKey];
[self.filter setValue:@(slider.value) forKey:kCIInputIntensityKey];
// 开始渲染
[self.ciContext drawImage:[self.filter valueForKey:kCIOutputImageKey] inRect:CGRectMake(0, 0, self.glkView.drawableWidth, self.glkView.drawableHeight) fromRect:[self.ciImage
extent]];
[self.glkView display];
}
// ViewController.m
// CoreImageOfDong
//
// Created by Dong on 15/6/30.
// Copyright (c) 2015年 xindong. All rights reserved.
//
#import "ViewController.h"
#import <GLKit/GLKit.h>
// 需要导入此库
@interface ViewController ()
@property (nonatomic,
strong)
GLKView *glkView;
//渲染用的buffer视图(类似流媒体,实时改变)
@property (nonatomic, strong) CIFilter *filter;
@property (nonatomic, strong) CIImage *ciImage;
@property (nonatomic, strong) CIContext *ciContext;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
UIImage *showImage = [UIImage imageNamed:@"demo1.jpg"];
CGRect rect = CGRectMake(0, 0, showImage.size.width, showImage.size.height);
// 获取OpenGLES渲染的上下文
EAGLContext *eagContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
// 创建出渲染的buffer
self.glkView = [[GLKView alloc] initWithFrame:rect context:eagContext];
[self.glkView bindDrawable];
// 绑定绘制,否则刚开始会黑屏
[self.view addSubview:self.glkView];
// 创建出CoreImage用的上下文
self.ciContext = [CIContext contextWithEAGLContext:eagContext options:@{kCIContextWorkingColorSpace : [NSNull null]}];
// CoreImage相关设置
self.ciImage = [[CIImage alloc] initWithImage:showImage];
self.filter = [CIFilter filterWithName:@"CISepiaTone"];
[self.filter setValue:self.ciImage forKey:kCIInputImageKey];
[self.filter setValue:@(0) forKey:kCIInputIntensityKey];
// 开始渲染
[self.ciContext drawImage:[self.filter valueForKey:kCIOutputImageKey] inRect:CGRectMake(0, 0, self.glkView.drawableWidth, self.glkView.drawableHeight) fromRect:[self.ciImage
extent]];
[self.glkView display];
//
动态渲染
UISlider *slider = [[UISlider alloc] initWithFrame:CGRectMake(30, 500, 200, 10)];
slider.minimumValue = 0.f;
slider.maximumValue = 10.f;
[slider addTarget:self action:@selector(changeColorValue:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:slider];
}
- (void)changeColorValue:(UISlider *)slider
{
[self.filter setValue:self.ciImage forKey:kCIInputImageKey];
[self.filter setValue:@(slider.value) forKey:kCIInputIntensityKey];
// 开始渲染
[self.ciContext drawImage:[self.filter valueForKey:kCIOutputImageKey] inRect:CGRectMake(0, 0, self.glkView.drawableWidth, self.glkView.drawableHeight) fromRect:[self.ciImage
extent]];
[self.glkView display];
}
相关文章推荐
- css滤镜实现页面灰色黑白色效果代码
- PHPThumb图片处理实例
- Java图片处理 (文字水印、图片水印、缩放、补白)代码实例
- PHP图片处理之使用imagecopyresampled函数裁剪图片例子
- 常用的php图片处理类(水印、等比缩放、固定高宽)分享
- PHP图片处理之图片背景、画布操作
- PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
- 摘自织梦CMS中的图片处理类
- 10个最佳的PHP图像操作库
- PHP图片的裁剪与缩放
- PHP图像处理类库MagickWand用法实例分析
- PHP图像处理类库及演示分享
- PHP图片上传类带图片显示
- php图片验证码代码
- 简单的PHP图片上传程序
- 基于OpenCV的PHP图像人脸识别技术
- 《PHP编程最快明白》第七讲:php图片验证码与缩略图
- php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
- php图片上传存储源码并且可以预览
- Php图像处理类代码分享