GPUImage解析(九) —— 一个简单的实例之GPUImageTiltShiftFilter滤镜处理(四)

版本记录

版本号 时间
V1.0 2017.09.05

前言

GPUImage是直接利用显卡实现视频或者图像处理的技术。感兴趣可以看上面几篇文章。
1. GPUImage解析(一) —— 基本概览(一)
2. GPUImage解析(二) —— 基本概览(二)
3. GPUImage解析(三) —— 基本概览(三)
4. GPUImage解析(四) —— 安装方法及框架介绍
5. GPUImage解析(五) —— 框架中的几个基类
6. GPUImage解析(六) —— 一个简单的实例(一)
7. GPUImage解析(七) —— 一个简单的实例结合GPUImageVideoCamera(二)
8. GPUImage解析(八) —— 一个简单的实例之多滤镜视频采集存储(三)

功能要求

实现GPUImageTiltShiftFilter滤镜的处理效果。


功能实现

下面我们先看一下实现代码。

1. JJGPUImageTiltShiftVC.h
#import 

@interface JJGPUImageTiltShiftVC : UIViewController

@end
2. JJGPUImageTiltShiftVC.m
#import "JJGPUImageTiltShiftVC.h"
#import "GPUImage.h"

@interface JJGPUImageTiltShiftVC ()

@property (nonatomic, strong) GPUImagePicture *imagePicture;
@property (nonatomic, strong) GPUImageTiltShiftFilter *tiltShiftFilter;
@property (nonatomic, strong) GPUImageView *imageView;

@end

@implementation JJGPUImageTiltShiftVC

#pragma mark - Override Base Function

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor whiteColor];
    
    [self loadTiltShiftEffect];
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesMoved:touches withEvent:event];
    
    UITouch *touch = [touches anyObject];
    CGPoint point = [touch locationInView:self.imageView];
    float rate = point.y / self.imageView.frame.size.height;
    [self.tiltShiftFilter setTopFocusLevel:rate - 0.1];
    [self.tiltShiftFilter setBottomFocusLevel:rate + 0.1];
    [self.imagePicture processImage];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    
    self.navigationController.navigationBarHidden = YES;
}

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];
    
    self.navigationController.navigationBarHidden = NO;
}

#pragma mark - Object Private Function

- (void)loadTiltShiftEffect
{
    //实例化GPUImageView
    GPUImageView *imageView = [[GPUImageView alloc] initWithFrame:self.view.frame];
    imageView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;
    [self.view addSubview:imageView];
    self.imageView = imageView;
    
    //实例化GPUImagePicture
    self.imagePicture = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"picture"]];
    
    //实例化GPUImageTiltShiftFilter - 模拟倾斜移位滤镜效果
    self.tiltShiftFilter = [[GPUImageTiltShiftFilter alloc] init];
    self.tiltShiftFilter.blurRadiusInPixels = 40.0;
    [self.tiltShiftFilter forceProcessingAtSize:imageView.sizeInPixels];
    
    //add target
    [self.imagePicture addTarget:self.tiltShiftFilter];
    [self.tiltShiftFilter addTarget:imageView];
    [self.imagePicture processImage];

    //GPUImageContext相关的数据显示
    GLint size = [GPUImageContext maximumTextureSizeForThisDevice];
    GLint unit = [GPUImageContext maximumTextureUnitsForThisDevice];
    GLint vector = [GPUImageContext maximumVaryingVectorsForThisDevice];
    NSLog(@"%d %d %d", size, unit, vector);
}

@end

效果验证

下面我们看一下效果图和gif图。

GPUImage解析(九) —— 一个简单的实例之GPUImageTiltShiftFilter滤镜处理(四)_第1张图片

这个效果有没有很炫很好玩呢~~

后记

未完,待续~~

GPUImage解析(九) —— 一个简单的实例之GPUImageTiltShiftFilter滤镜处理(四)_第2张图片

你可能感兴趣的:(GPUImage解析(九) —— 一个简单的实例之GPUImageTiltShiftFilter滤镜处理(四))