GPUImage解析(九) —— 一個(gè)簡單的實(shí)例之GPUImageTiltShiftFilter濾鏡處理(四)

版本記錄

版本號(hào) 時(shí)間
V1.0 2017.09.05

前言

GPUImage是直接利用顯卡實(shí)現(xiàn)視頻或者圖像處理的技術(shù)。感興趣可以看上面幾篇文章。
1. GPUImage解析(一) —— 基本概覽(一)
2. GPUImage解析(二) —— 基本概覽(二)
3. GPUImage解析(三) —— 基本概覽(三)
4. GPUImage解析(四) —— 安裝方法及框架介紹
5. GPUImage解析(五) —— 框架中的幾個(gè)基類
6. GPUImage解析(六) —— 一個(gè)簡單的實(shí)例(一)
7. GPUImage解析(七) —— 一個(gè)簡單的實(shí)例結(jié)合GPUImageVideoCamera(二)
8. GPUImage解析(八) —— 一個(gè)簡單的實(shí)例之多濾鏡視頻采集存儲(chǔ)(三)

功能要求

實(shí)現(xiàn)GPUImageTiltShiftFilter濾鏡的處理效果。


功能實(shí)現(xiàn)

下面我們先看一下實(shí)現(xiàn)代碼。

1. JJGPUImageTiltShiftVC.h
#import <UIKit/UIKit.h>

@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<UITouch *> *)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
{
    //實(shí)例化GPUImageView
    GPUImageView *imageView = [[GPUImageView alloc] initWithFrame:self.view.frame];
    imageView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill;
    [self.view addSubview:imageView];
    self.imageView = imageView;
    
    //實(shí)例化GPUImagePicture
    self.imagePicture = [[GPUImagePicture alloc] initWithImage:[UIImage imageNamed:@"picture"]];
    
    //實(shí)例化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相關(guān)的數(shù)據(jù)顯示
    GLint size = [GPUImageContext maximumTextureSizeForThisDevice];
    GLint unit = [GPUImageContext maximumTextureUnitsForThisDevice];
    GLint vector = [GPUImageContext maximumVaryingVectorsForThisDevice];
    NSLog(@"%d %d %d", size, unit, vector);
}

@end

效果驗(yàn)證

下面我們看一下效果圖和gif圖。

這個(gè)效果有沒有很炫很好玩呢~~

后記

未完,待續(xù)~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容