【iOS开发】制作一个简易的滤镜相机(一)

我们接着上一篇废话,这回保证有干货!

  1. 打开上次的工程。找到ViewController.h

  2. 引用GPUImage头文件#import "GPUImage.h"

  3. 添加三个成员

     @interface ViewController : UIViewController
     {
       GPUImageVideoCamera *_videoCamera;
       GPUImageOutput *_filter;
       GPUImageMovieWriter *_movieWriter;
     }
    

顾名思义,
GPUImageVideoCamera用来创建摄像头实例;
GPUImageOutput用来处理滤镜,这里没有用Filter来命名类名因为GPUImage的接口做的非常通用,滤镜只是图像输出的一种情况;
GPUImageMovieWriter当然就是写文件的类了,把摄像头捕获的帧数据写入文件。

  1. 在ViewController.m->viewDidLoad末尾添加以下代码

     // 1. Initialize camera
     _videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetiFrame960x540 cameraPosition:AVCaptureDevicePositionBack];
     _videoCamera.outputImageOrientation = UIInterfaceOrientationPortrait;
     _videoCamera.horizontallyMirrorFrontFacingCamera = NO;
     _videoCamera.horizontallyMirrorRearFacingCamera = NO;
    
     // 2. Add camera view to current view
     GPUImageView *filterView = (GPUImageView *)self.view;
     [_videoCamera addTarget:filterView];
     [_videoCamera startCameraCapture];
    

960x540和官方demo里的640x480不一样,960的是宽屏,经我多次尝试以后定下的尺寸,兼顾宽屏,性能和画面质量。

  1. 是不是很简单?运行一下?我猜,app崩溃了。是不是报这个错?
    -[UIView nextAvailableTextureIndex]: unrecognized selector sent to instance
  2. 好了,不开玩笑。那是因为我们还没有设置ViewController的view是什么类,默认为UIView当然找不到GPUImageView类提供的方法。
    到storyboard中选中controller里的view


    【iOS开发】制作一个简易的滤镜相机(一)_第1张图片
    1.png

    【iOS开发】制作一个简易的滤镜相机(一)_第2张图片
    2.png
  3. 好了,再运行,完美!


    【iOS开发】制作一个简易的滤镜相机(一)_第3张图片
    图片发自App

至此……
诶不行不行,这个效果我用AVFoundation也可以做啊!
那么加个滤镜吧,不然真的浪费了这么强大的库。

  1. 在之前的第二段代码(看注释)上方加入以下代码

     // 3. Set filter
     _filter = [[GPUImageSepiaFilter alloc] init];
     [_videoCamera addTarget:_filter];
    
  2. 第二段代码中有一句要改掉
    [_videoCamera addTarget:filterView];
    改成
    [_filter addTarget:filterView];
    没错,相机加到滤镜实例上再加到view上面。

  3. 看看效果


    【iOS开发】制作一个简易的滤镜相机(一)_第4张图片
    图片发自App

这篇先写到这里,接下来还有很多事情等着我们去一步一步完善,请耐心等待。下一篇中我们要实现按键录像并进行保存。

你可能感兴趣的:(【iOS开发】制作一个简易的滤镜相机(一))